JS-файл не работает

Вот код в моем файле JS:

function arrayContains(array, value){
    return array.indexOf(value) > -1;
}
var possibleOptions = ["male", "female", "m", "f"];
var gender = prompt("What's your gender?","");
while(!arrayContains(possibleOptions, gender))
    gender = prompt("Invalid input. What's your gender?");
var name = prompt("What's your name?","");
var greeting = (gender == "male" || gender == "m") ? "Sup dude." : "Sup girl.";
alert("Hello, " + name + "! " + greeting);

Ошибка, которую я получаю:

Line: 5
char: 1
Object expected.

Я не могу понять это.


person Aviv Cohn    schedule 27.09.2014    source источник
comment
добавить ` before '. I think '` это ваша проблема   -  person Prashant Tapase    schedule 27.09.2014
comment
your code работает нормально   -  person Mithun Satheesh    schedule 27.09.2014
comment
Этот код работает без ошибок: jsfiddle.net/cscr3bvu   -  person Quentin    schedule 27.09.2014
comment
@mithunsatheesh Среда выполнения Microsoft JScript запускает это. Это имеет значение?   -  person Aviv Cohn    schedule 27.09.2014
comment
@mithunsatheesh Я запускаю его, дважды щелкнув по нему на рабочем столе. Это имеет значение?   -  person Aviv Cohn    schedule 27.09.2014
comment
@AvivCohn — Да, это важно. Большая часть JavaScript написана для работы в веб-браузере. Мы предполагали, что именно там вы его запускали.   -  person Quentin    schedule 27.09.2014
comment
Вот (своего рода) повторяющийся вопрос. В Windows Scripting Host нет глобального prompt.   -  person Quentin    schedule 27.09.2014
comment
alert и prompt — это методы глобального объекта-окна (который существует в браузере, но не при запуске через WSH)   -  person Dr.Molle    schedule 27.09.2014
comment
@Квентин, я вижу. Я хотел бы знать: каков стандартный способ кодирования и запуска кода Javascript? Создать файл .html и вставить его туда? Или каким-то другим способом?   -  person Aviv Cohn    schedule 27.09.2014
comment
@AvivCohn — JavaScript — это язык программирования. Вы можете использовать его во многих местах. Клиентская часть на веб-странице является наиболее распространенной. Выбор того, что вы используете, будет в основном зависеть от того, чего вам нужно достичь, а не от того, что делают другие люди.   -  person Quentin    schedule 28.09.2014


Ответы (1)


Две проблемы:

  1. Как упоминалось в комментариях, хост сценария w/cscript.exe не поддерживает ни prompt(), ни alert().
  2. Массивы JScript не имеют метода .IndexOf()

Вы должны свернуть свой собственный:

function arrayContains(array, value){
    for (var i = 0, e = array.length; i < e; ++i) {
        if (array[i] === value) {
            return true;
        }
    }
    return false;
}

function prompt(p) {
    WScript.Stdout.Write(p + " > ");
    return WScript.StdIn.ReadLine();
}

function alert(s) {
    WScript.Echo(s);
}

var possibleOptions = ["male", "female", "m", "f"];
var gender = prompt("What's your gender?","");
while(!arrayContains(possibleOptions, gender))
    gender = prompt("Invalid input. What's your gender?");
var name = prompt("What's your name?","");
var greeting = (gender == "male" || gender == "m") ? "Sup dude." : "Sup girl.";
alert("Hello, " + name + "! " + greeting);

вывод (консоль):

cscript 26073853.js
What's your gender? > neuter
Invalid input. What's your gender? > male
What's your name? > tarzan
Hello, tarzan! Sup dude.

cscript 26073853.js
What's your gender? > female
What's your name? > jane
Hello, jane! Sup girl.
person Ekkehard.Horner    schedule 27.09.2014