《JavaScript经典面试题》第7道:下面的代码运行结果是什么么?

微信公众号:javafirst

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

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

例子1:

得到的结果是:

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

例子2:

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

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

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

例子3:

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

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

例子4:

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

例子5:

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

例子6:

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


更多资源扫一扫免费获取


猜你喜欢

转载自blog.csdn.net/xiamiflying/article/details/80974408