第 116 题:输出以下代码运行结果
1 + "1" 2 * "2" [1, 2] + [2, 1] "a" + + "b"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
1 + "1" 2 * "2" [1, 2] + [2, 1] "a" + + "b"
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(34)
补充一下:js中一元加的优先级高于2元加,第四问主要考查的是js的运算优先级
运算优先级
我的问题是,为什么不是第一个。而是第三个呢?
"11"
4
"1,22,1"
"aNaN"
关于第四个为何+“b”等于“NaN”,大家可以参考这里。
原理是:
首先一元运算符+优先级高于二元运算符+,原式等于"a" + ( +"b");
而+“b”可以看上面的链接,对于类似"2b"、“b”、“b2”不是纯数字的串,进行一元加运算时无法转化为数字,返回“NaN”。
因为一元运算符优先级高。参考
这个我知道啊,你说说优先级怎么样?
mark too
1 + "1"
//"11"
2 * "2"
//4
[1, 2] + [2, 1]
//"1,22,1"
"a" + + "b"
//"aNaN"
今天的题目还是比较简单
另外
终于有个明白人 一元运算符居然有这么多人不知道
console.log( 1 + "1" )
//11
console.log( 2 * "2" )
//4
console.log([1, 2] + [2, 1])
//[3,3]. [1,2,1]
console.log("b" + + "a")
//"a b" [aNaN]
1 + "1" //11
2 * "2" // 4
[1, 2] + [2, 1] // 相当于转成stirng,所以12+21=1221
"a" + + "b" // +‘b’隐式转换为NaN,'a'+NaN=aNaN
关于这个 "a" + + "b" 为aNaN,是因为第二个+号是正号的意思,一元运算符(单目运算符的优先级高于双目运算符),+"b" ,"b"隐式转换number类型所以aNaN
以上来自百度
+"b" =>Number("b")=>NaN
摘抄
对数字进行一元加操作,结果返回数字本身,要注意对负数进行一元加操作结果还是负数啦,不要以为会得到整数;
对布尔类型进行一元加操作,true的话返回1,false返回0;
对null进行一元加操作,返0;
对undefined进行一元加操作,返回NaN;
对字符串进行一元加操作,有两种结果,如果字符串由纯数字构成的话,返回1,如果不是则返回NaN;
对对象进行一元加操作,也有两种结果,一是返回数字,二是返回NaN;操作过程中首先会调用valueOf方法,如果得不到数字结果,就调用toString方法,再对得到的字符串进行一元加操作;
属性访问 > 一元操作符 > 乘除 > 加减 > 比较 > 相等 > 与运算 > 或运算 > 三目运算 > 赋值运算
输出以下代码运行结果
参考:一元正号运算符位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值
其实是数组的toString方法里面调用的join方法,而不是本身就调用了join。在你的例子最下面加上console.log('test :>> ', arr.toString());可以看出join也打印了
1 - '1' = 0
1 / '1' = 1
算术运算符 MDN
稍稍补充一小下:
加号作为一元运算符时,其后面的表达式将进行ToNumber(参考es规范)的抽象操作:
很基础的题目,不过数组那个case有点不一样,它最后还会再执行join方法进行隐式转换
更多类型转换相关可见这里
mark 一下
"a" + + "b" 相当于 "a" + Number("b")
难度一般
+"b" => NAN
+(正)-(负)!, ++,--
优先级 比+、-、*、/ 运算优先级高
加性操作符:如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来
所以值为:“11”
乘性操作符:如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值
Javascript中所有对象基本都是先调用
valueOf
方法,如果不是数值,再调用toString
方法。所以两个数组对象的toString方法相加,值为:"1,22,1"
后边的“+”将作为一元操作符,如果操作数是字符串,将调用Number方法将该操作数转为数值,如果操作数无法转为数值,则为NaN。
所以值为:"aNaN"
以上均参考:《Javascript高级程序设计》
"a" + + "b"
是先+"b"
, 所以是NaN
=>"a" + NaN
=>"aNaN"
"a" + + "b"
"aNaN"
这个是为啥
最后一个不懂
求讲解
11
4
1,22,1
aNaN