This question already has answers here:
Concatenate string with ternary operator in javascript
(2个答案)
confusion with hasOwnProperty
(1个答案)
3年前关闭。
我有一个未定义的变量,并在字符串concat中对其进行了检查:
考虑到undefinedVariable是未定义的,因此
未捕获的TypeError:无法读取未定义的属性“ toString”(…)
奇怪的是,如果我在console.log的开头删除了“ foo”,那么代码可以正常工作。
我已经在chrome和firefox中进行了测试,得到的结果相同,因此可能不是错误。有什么解释为什么JS引擎试图运行不可达部分?
您需要告诉JavaScript引擎分别评估
上面给了我:
(2个答案)
confusion with hasOwnProperty
(1个答案)
3年前关闭。
我有一个未定义的变量,并在字符串concat中对其进行了检查:
var undefinedVariable = undefined;
console.log("foo" + undefinedVariable === undefined ? "bar" : undefinedVariable.toString() );
考虑到undefinedVariable是未定义的,因此
undefinedVariable.toString()
是无法访问的代码。但是,我收到此错误:未捕获的TypeError:无法读取未定义的属性“ toString”(…)
奇怪的是,如果我在console.log的开头删除了“ foo”,那么代码可以正常工作。
console.log(undefinedVariable === undefined ? "bar" : undefinedVariable.toString() );
我已经在chrome和firefox中进行了测试,得到的结果相同,因此可能不是错误。有什么解释为什么JS引擎试图运行不可达部分?
最佳答案
这是因为Operator Precedence。 +
(连接运算符)的优先级比?:
(三元运算符)大。因此,您需要将三元条件放在()
内,因为它将三元条件与+
(并置运算符)一起使用,而左侧不再是undefined
。利用:
console.log("foo" + (undefinedVariable === undefined ? "bar" : undefinedVariable.toString()) );
您需要告诉JavaScript引擎分别评估
undefinedVariable
,并且不要同时加入"foo"
和undefinedVariable
进行评估。var undefinedVariable = undefined;
console.log("foo" + (undefinedVariable === undefined ? "bar" : undefinedVariable.toString()) );
上面给了我:
foobar
。10-06 07:42