经典面试题(7):下面的代码运行结果是什么么?

JavaScript(ECMAScript)是一种弱类型语言,它可对值进行自动类型转换,以适应正在执行的操作。


让我们通过下面的6个例子来说明一下。


例子1:

console.log(1 +  "2" + "2");

得到的结果是:

"122"

解析: 1 + "2" + "2"  输出: "122" 。  1 + "2" 是执行的第一个操作。由于其中一个运算对象 "2" 是字符串,JavaScript会假设它需要执行字符串连接,因此,会将  1 的类转换为 "1"  ,  1+"2" 结果就是 "12" 。然后, "12"+"2" 就是 "122" 。


例子2:

console.log(1 +  +"2" + "2");

得到的结果是:

"32"

解析: 1 + +"2" + "2" 输出: "32" 说明:根据运算的顺序,要执行的第一个运算是 +"2" (第一个 "2" 前面的额外 + 被视为一元运算符)。


因此,JavaScript将 "2" 的类型转换为数字,然后应用一元 + 号(即将其视为一个正数)。其结果就是得到一个数字 2 ,接下来的运算就是 1 + 2 ,这当然是 3 。


然后我们需要在一个数字和一个字符串之间进行运算(即, 3 和 "2"),同样的,JavaScript会将数值类型转换为字符串,并执行字符串的连接,产生 "32" 。


例子3:

console.log(1 +  -"1" + "2");

得到的结果是:

"02"

解析:  1 + -"1" + "2"  输出: "02" 。这里的解释和前一个例子相同,不同的地方是此处的一元运算符是 - 而不是 + 。


先是 "1" 变为 1 ,然后当应用 - 时又变为了 -1 ,然后将其与 1 相加,结果为 0 ,再将其转换为字符串,连接最后的  "2"  运算对象,得到 "02" 。


例子4:

console.log(+"1" +  "1" + "2");

得到的结果是:

"112"

解析: +"1" + "1" + "2"  输出:  "112" 。虽然第一个运算对象  "1" 因为前缀的一元 + 运算符类型转换为数值,但当连接到第二个运算对象 "1" 的时候,又立即转换回字符串,然后又和最后的运算对象 "2"  连接,产生了字符串  "112" 。


例子5:

console.log( "A" - "B" + "2");

得到的结果是:

"NaN2"

解析: "A" - "B" + "2" 输出: "NaN2" 。由于运算符 - 不能被应用于字符串,并且 "A" 和 "B" 都不能转换成数值,因此, "A" - "B" 的结果是 NaN  ,然后再和字符串 "2"  连接,得到 "NaN2"  。


例子6:

console.log( "A" - "B" + 2);

得到的结果是:

NaN

解析: "A" - "B" + 2 输出: NaN 。参见前一个例子, "A" - "B" 结果为 NaN 。但是,应用任何运算符到 NaN 与其他任何的数字运算对象,结果仍然是 NaN 。

热门文章

原创教程

原创教程:

附加习题:


趣味职场

职场焦虑:

感到迷茫:

培训出身:

培训费用:

搞笑黑话:

职业自由:

职场形象:


合作推广分割线

640?wx_fmt=jpeg


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值