Javascript if-statement vs. comparsion
Javascript if-statement vs. comparsion
if-statement JavaScript 中将条件包装成布尔值是真的吗?
if(x) => if(Boolean(x))
在比较中,JavaScript 将比较元素包装成一个数字是真的吗?
a == b => Number(a) == Number(b)
是,也不是。
对于第一部分,是的,这基本上就是javascript所做的。
但对于后者,没有。并非 JavaScript 中的所有内容都可以转换为数字。例如:
Number('abc') // => NaN
非数字不相等:
NaN == NaN // => false
所以像这样:
Number('abc') == Number('abc') // => false!
但对于平等比较来说,这实际上是正确的。
'abc' == 'abc' // => true
作为旁注,最好在 JavaScript 中使用 ===
,它还检查要比较的值的类型:
0 == '0' // => true
0 === '0' // => false, because integer is not a string
有关===
的更多详细信息,请参阅此处。
-
是的,确实如此,在这种情况下,
x
是在布尔上下文中评估的,因此应用了相当于Boolean(x)
。 -
不,这不是真的。它之所以看起来如此,是因为强制相等运算符
==
尝试将a
和b
转换为相同的类型。 仅当a
或b
已经是Number
时,才应用Number()
。例如:
>>> 0x2A == 42
true // both 'a' and 'b' are numbers.
>>> "0x2A" == 42
true // 'a' is a string whose number coercion is equal to 'b'.
>>> "0x2A" == "42"
false // 'a' and 'b' are different strings.
在 if 语句 JavaScript 中将条件包装到布尔值中是真的吗?
通常是的。
在比较中,JavaScript 将比较元素包装成一个数字是真的吗?
绝对没有。
解释
来自 JavaScript 语言规范。
§ 12.5 中if
语句定义为:
if ( 表达式 ( 语句 else 语句
它说表达式将被评估,用GetValue()
转换,然后在ToBoolean()
转换后进行测试。
然后第一个断言为 true(但稍后见(,if
语句的条件被计算,就像作为参数传递给 Boolean
函数一样。请回想一下 JavaScript 如何处理类型转换为布尔值 (§ 9.2(:
-
undefined
和null
值将转换为false
。
如果数字为 - ±0 或
NaN
则转换为false
,否则它们将转换为true
。 - 如果字符串为空,则转换为
false
否则始终转换为true
,无论其内容如何。 - 对象始终转换为
true
。
由于呼吁GetValue()
严格来说,这个断言并不总是正确的,看看§8.7.1,其中标准描述了GetValue()
是如何工作的,在调用ToBoolean()
之前可能会发生一些魔术转换。
==
运算符的定义见 § 11.9.3。
如您所见,它没有指定操作数必须是(或将被视为(数字,运算符的行为是不同的,并受基于操作数类型的一系列规则的约束。那么你的第二个断言是错误的。它们是数字(或其中一个是数字(的情况只是算法中的一个特例,请注意,在算法的第 4 点,它说如果其中一个是数字,另一个是字符串,那么它将用 ToNumber()
进行转换,只有在这种情况下(具有此转换的所有含义(。
如果您认为可以比较函数,字符串或数字,则很直观,但并非每种类型都可以转换为数值。
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- Js.erb VS按钮标记-不'不起作用.为什么?
- reactjs this.refs vs document.getElementById
- Performance: NaCl vs Emscripten
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- Advantages to DOMParser vs template & innerHTML
- JavaScript-===vs===运算符性能
- 开发第三方小部件-Angular vs jQuery vs普通的旧JS
- PhantomJS(vs nightwatch.js)设置cookie错误
- Javascript events: window.event vs argument reference (funct
- 需要确认我对Servlet vs RESTful网页的理解's的差异
- "#"keyCode=222 vs 51(Chrome与Android版Chrome)-为什么有区别
- .notion vs.[]notation |插入到文本对象中
- Javascript-使用“”将toDateStringMonth从文本字符串解析为数字字符串;如果“;vs“;开关”;
- 没有框架/DLL的VS Web应用程序项目
- Eval vs execscript
- VS代码:在<脚本>标签
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- Javascript if-statement vs. comparsion