if语句未返回预期结果Javascript

时间:2018-07-11 03:10:10

标签: javascript object if-statement alert prompt

在学习了一些关于对象构造函数的知识之后,我写了一个小脚本,我想通过这段代码使它更进一步,但是if statement的表现不如预期...我想知道的一切也就是为什么?我了解这种脚本在Javascript中不是正常的事情...但是我相信===的评估结果为true,因此无论在警告框中打印dave都是如此我输入的内容,并且没有遵循if statement条件。

var dave, jason, nick, get;

get = prompt('Input your Name', 'Name Here')


var Person = function (name, birthYear, job) {
    this.name = name;
    this.birthYear = birthYear;
    this.job = job;
};

dave = new Person('Dave', 1976, 'Showman');
jason = new Person('Jason', 1987, 'Novice');
nick = new Person('Nick', 1993, 'Cable-tech');


function printObj(object) {
    var output = '';
    for (var property in object) {
        output += property + ': ' + object[property] + '\n';
    }
    alert(output);
}

if (get.toLowerCase === 'dave'.toLowerCase) {
    printObj(dave);
} else if (get.toLowerCase === 'jason'.toLowerCase) {
    printObj(jason);
} else if (get.toLowerCase === 'nick'.toLowerCase) {
    printObj(nick);
} else {
    alert('Not a defined object')
}

比较可能是我可能做错了的另一件事……但这就是在freenode上的 javascript 中向我解释的方式,因为起初这是我的问题,仍然是我想。我认为我只是在做一些明显混乱的事情,感谢收到的任何见解, MDN W3 只能解释很多。

2 个答案:

答案 0 :(得分:1)

get.toLowerCase()是一种方法,应使用开括号和闭括号来调用。当前的编写方式是在不同的字符串实例上检查该方法是否等于该方法。

if (get.toLowerCase() === 'dave') {
    printObj(dave);
} else if (get.toLowerCase() === 'jason') {
    printObj(jason);
} else if (get.toLowerCase() === 'nick') {
    printObj(nick);
} else {
    alert('Not a defined object')
}

由于要与小写字符串进行比较,因此不需要在toLowerCase()'dave''jason'上调用'nick'。我认为您可能打算与存储在变量davejasonnick中的值进行比较。

if (get.toLowerCase() === dave.name.toLowerCase()) {
    printObj(dave);
} else if (get.toLowerCase() === jason.name.toLowerCase()) {
    printObj(jason);
} else if (get.toLowerCase() === nick.name.toLowerCase()) {
    printObj(nick);
} else {
    alert('Not a defined object')
}

最后,您不应命名变量getget在ES6中是保留的,因此当浏览器开始原生支持它时,您的代码将做一些非常奇怪的事情。我建议使用类似userInput的东西。

var dave, jason, nick, userInput;

userInput = prompt('Input your Name', 'Name Here')

//...other code...

if (userInput.toLowerCase() === dave.name.toLowerCase()) {
    printObj(dave);
} else if (userInput.toLowerCase() === jason.name.toLowerCase()) {
    printObj(jason);
} else if (userInput.toLowerCase() === nick.name.toLowerCase()) {
    printObj(nick);
} else {
    alert('Not a defined object')
}

答案 1 :(得分:-1)

您使用错误的.toLowerCase()方法。另外,您正在使用get

您的代码:

var dave, jason, nick, get;

get = prompt('Input your Name', 'Name Here')

// other code

if (get.toLowerCase === 'dave'.toLowerCase) {
    printObj(dave);
} else if (get.toLowerCase === 'jason'.toLowerCase) {
    printObj(jason);
} else if (get.toLowerCase === 'nick'.toLowerCase) {
    printObj(nick);
} else {
    alert('Not a defined object')
}

正如您在代码中看到的那样,您的.toLowerCase方法错过了()。并且请不要使用get作为变量名,因为get是关键字。

尝试一下:

var dave, jason, nick, inputValue;

inputValue = prompt('Input your Name', 'Name Here')

// other code

if (inputValue.toLowerCase() === 'dave'.toLowerCase()) {
    printObj(dave);
} else if (inputValue.toLowerCase() === 'jason'.toLowerCase()) {
    printObj(jason);
} else if (inputValue.toLowerCase() === 'nick'.toLowerCase()) {
    printObj(nick);
} else {
    alert('Not a defined object')
}

此外,如果要比较自己定义的比较,则无需添加.toLowerCase()。您实际上想将输入值(大小写未知的格式,即大写或小写)与要比较的小写字符串值进行比较。

使用此:

if (get.toLowerCase === 'dave')

代替

if (get.toLowerCase === 'dave'.toLowerCase())