为什么下面的javascript代码返回true?不应该';它不会出错吗?
今天,我有一个打字错误,很难抓住,因为它没有像我预期的那样抛出错误 经过一些快速测试后,下面的代码总是返回true,显然,在本例中返回“first”。为什么会发生这种情况?为什么不产生错误呢 下面是一个简单的代码示例:为什么下面的javascript代码返回true?不应该';它不会出错吗?,javascript,function,error-handling,syntax-error,Javascript,Function,Error Handling,Syntax Error,今天,我有一个打字错误,很难抓住,因为它没有像我预期的那样抛出错误 经过一些快速测试后,下面的代码总是返回true,显然,在本例中返回“first”。为什么会发生这种情况?为什么不产生错误呢 下面是一个简单的代码示例: function func(num) { return num = 5 ? 'first' : 'second'; } console.log(func(1)); // log 'first' 我的林特抓住了它,但一开始我在一个JSBin中,没有注意到。num=5?”第一
function func(num) {
return num = 5 ? 'first' : 'second';
}
console.log(func(1)); // log 'first'
我的林特抓住了它,但一开始我在一个JSBin中,没有注意到。
num=5?”第一个“:“第二个”
表达式的计算如下:
5?“第一个“:“第二个”
表达式首先求值(因为条件运算符的优先级高于赋值运算符),并返回值“第一个”
,因为5
是“truthy”num='first'
表达式将'first'
字符串赋值给num
变量,并返回'first'
,因为赋值运算符=
返回正确的操作数num=5?“第一个“:“第二个”
表达式的计算如下:
5?“第一个“:“第二个”
表达式首先求值(因为条件运算符的优先级高于赋值运算符),并返回值“第一个”
,因为5
是“truthy”num='first'
表达式将'first'
字符串赋值给num
变量,并返回'first'
,因为赋值运算符=
返回正确的操作数“第一个”
。它实际上被评估为5?'第一个“:“第二个”
,其计算结果为“第一个”
。然后分配给num.@JordanHendrix ECMAScript遵循精确的语言规范。怪异是在返回语句中执行赋值,但我想你现在知道了非常类似于做if(x=y)
,有时人们确实需要它,而不是if(x=y)
。你怎么这么快?谢谢你@zerkms@JordanHendrix我是一只猫-猫很快:3我得到了第二部分,第五部分是真实的,第一部分是更多的问题,再次感谢这几乎是正确的,但不完全正确。num未指定为5。它被分配为“第一个”
。它实际上被评估为5?'第一个“:“第二个”
,其计算结果为“第一个”
。然后分配给num.@JordanHendrix ECMAScript遵循精确的语言规范。怪异是在返回语句中执行赋值,但我想你现在知道了非常类似于做if(x=y)
,这是人们有时真正想要的,而不是if(x=y)
。