无法在 JavaScript 中正确编写三元运算符
Unable to correctly write ternary operator in JavaScript
我有一个未定义的变量,我在字符串连接中检查它:
var undefinedVariable = undefined;
console.log("foo" + undefinedVariable === undefined ? "bar" : undefinedVariable.toString() );
考虑到undefinedVariable是未定义的,undefinedVariable.toString()
是一个不可到达的代码。但是,我收到此错误:
Uncaught TypeError: Cannot read property 'toString' of undefined(…)
奇怪的是,如果我在 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
.
我有一个未定义的变量,我在字符串连接中检查它:
var undefinedVariable = undefined;
console.log("foo" + undefinedVariable === undefined ? "bar" : undefinedVariable.toString() );
考虑到undefinedVariable是未定义的,undefinedVariable.toString()
是一个不可到达的代码。但是,我收到此错误:
Uncaught TypeError: Cannot read property 'toString' of undefined(…)
奇怪的是,如果我在 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
.