【问题标题】:if statement is not returning expected result Javascriptif 语句未返回预期结果 Javascript
【发布时间】:2018-07-11 03:10:09
【问题描述】:

在了解了一些对象构造函数后,我编写了一个小脚本,我想用这段代码更进一步,但 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')
}

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

【问题讨论】:

  • .toLowerCase()不是函数方法吗?会不会有什么问题?
  • @JoshuaTerrill 是的。实际上 === 两边是同一个函数,所以它们是相等的。
  • 嗯,我最初的想法是使用 get === /dave/i 但这没有用。 ##javascript 中向我建议使用 toLowerCase。我仍然非常处于新手水平。这会导致它为任何响应输入打印 dave?
  • 另外,如果everything in lower case 已经小写,你为什么还要'everything in lower case'.toLowerCase()
  • 当'get'是从提示中收到的,我试图解释大写名称被发送到'get',我发现它在较新的版本中被保留,目前已更改为yourName跨度>

标签: javascript object if-statement alert prompt


【解决方案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')
}

由于您要与小写字符串进行比较,因此您无需在 'dave''jason''nick' 上调用 toLowerCase()。我想您可能想与变量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')
}

【讨论】:

  • 非常有帮助,让我根据你的建议进行调整,看看我的本地实例给我带来了什么。所以基本上我应该将它与已经存在的属性进行比较,而不是展示我自己的字符串?
  • 你也可以使用自己的字符串,我只是提供选项
  • 不不,指出快捷方式/其他路径非常有用。但是现在我没有为任何匹配的名称调用 printObj。我只得到其他警报。我想我只是不擅长 javascript。
  • userInput.toLowerCase() === dave.name.toLowerCase() 不起作用,但 userInput.toLowerCase() === 'dave' 起作用了,脚本现在按预期工作。谢谢您的帮助。不知道为什么你的建议没有奏效。我明白为什么它应该起作用,但不明白为什么它不起作用。我想我还有更多要学的东西。
  • 不确定。这个对我有用。可能是您身边某处的简单错字。 JavaScript 就是这样有趣 :D 很高兴你让它工作了。干杯!
【解决方案2】:

您以错误的方式使用.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())

【讨论】:

  • 我确实已经停止使用 get 作为变量并切换到if (yourName.toLowerCase() === 'dave')
猜你喜欢
  • 1970-01-01
  • 2018-06-16
  • 2015-11-19
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2011-08-09
相关资源
最近更新 更多