【问题标题】:JavaScript Implicit CoercionJavaScript 隐式强制
【发布时间】:2019-03-09 09:22:59
【问题描述】:

我正在阅读有关隐式和显式强制的 JavaScript 教程。

关于隐式强制,在后台会发生什么?

var a = "42";

var b = a * 1; //this is implicitly coerced to 42 -- the number

隐式强制总是是否强制转换为数字?如果我们想按照下面的 Python 示例做一些事情怎么办。

我很困惑,因为其他语言(例如 Python)会给您如下所示的结果。

a = "3";

b = 9;

print a * b; //This would print 333333333 -- the string

【问题讨论】:

  • 它将根据操作和操作数进行强制。例如+ 将强制字符串和数字都为字符串,但使用布尔值和数字将强制为数字。
  • 虽然熟悉 JavaScript 中隐式强制转换的概念和一般结果是件好事,但在任何类型的生产质量代码中依赖这些都不是一个好主意。

标签: javascript coercion


【解决方案1】:

为了方便您就隐式强制得出一些结论,我将把它留在这里:

true + false             // 1
12 / "6"                 // 2
"number" + 15 + 3        // 'number153'
15 + 3 + "number"        // '18number'
[1] > null               // true
"foo" + + "bar"          // 'fooNaN'
'true' == true           // false
false == 'false'         // false
null == ''               // false
!!"false" == !!"true"    // true
['x'] == 'x'             // true 
[] + null + 1            // 'null1'
[1,2,3] == [1,2,3]       // false
{}+[]+{}+[1]             // '0[object Object]1'
!+[]+[]+![]              // 'truefalse'
new Date(0) - 0          // 0
new Date(0) + 0          // 'Thu Jan 01 1970 02:00:00(EET)0'

但长话短说,规则是这样的,除非您进行显式强制,否则 Javascript 会根据 操作 为您做一个(因此 implicit) >涉及的操作数类型

您可以查看JavaScript Coercion Rules 表以获得完整的预期。

一件事note

JavaScript 强制总是产生一个 标量原始值,如字符串、数字、 或布尔值。没有强制导致复杂的值,如 对象或功能。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多