84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
最近在学JavaScript(NodeJs)在用for遍历一个JsonArray的时候发现了一个问题我当时是这样子写的:按道理来说这样写应该是错的,应该要判断是不是为Null,但是我运行了一下,居然成功了,没有报错,输出也正常黑人问号脸...求告知这是什么原理...难道obj2=obj1.result[i]会返回一个boolean??之前学过JAVA,感觉JavaScript相对JAVA有点不严谨,思想有点被禁锢...
obj2=obj1.result[i]
ringa_lee
赋值表达式会返回所赋的值。也就是说obj2=obj1.result[i]会返回obj1.result[i]。
obj1.result[i]
js是动态语言,它有隐私转换的特性,就是在该需要用到某种数据类型的时候,它会通过预先的规则来将传进来的值转换成特定的类型。
那么在刚刚赋值表达式obj2=obj1.result[i]中返回值是obj1.result[i],那js引擎就会对obj1.result[i]进行类型转换成Boolean类型。
如果你obj1.result[i]的值是除NaN,0,undefined,null,''之外的其他值,都会转换成true,否则则是false。
NaN
0
undefined
null
''
true
false
赋值运算符的返回结果就是这个被赋值的值,这个在各大类 C 的语言里,包括 Java 都是这样定义的,不足为奇。
Java 里条件判断只能用布尔值,而 JavaScript 不一样,这里需要一个布尔值你给的如果不是一个布尔值就会隐式转换成布尔值。
javascript是弱类型的语言,会自动转的~
一个等于号 是赋值的意思,等于你把obj1.result[i]赋给obj2了,所以一直成立
你可以去搜一下 = == ===的区别 看看题就懂了
赋值表达式会返回所赋的值。也就是说
obj2=obj1.result[i]
会返回obj1.result[i]
。js是动态语言,它有隐私转换的特性,就是在该需要用到某种数据类型的时候,它会通过预先的规则来将传进来的值转换成特定的类型。
那么在刚刚赋值表达式
obj2=obj1.result[i]
中返回值是obj1.result[i]
,那js引擎就会对obj1.result[i]
进行类型转换成Boolean类型。如果你
obj1.result[i]
的值是除NaN
,0
,undefined
,null
,''
之外的其他值,都会转换成true
,否则则是false
。赋值运算符的返回结果就是这个被赋值的值,这个在各大类 C 的语言里,包括 Java 都是这样定义的,不足为奇。
Java 里条件判断只能用布尔值,而 JavaScript 不一样,这里需要一个布尔值你给的如果不是一个布尔值就会隐式转换成布尔值。
javascript是弱类型的语言,会自动转的~
一个等于号 是赋值的意思,等于你把obj1.result[i]赋给obj2了,所以一直成立
你可以去搜一下 = == ===的区别 看看题就懂了