-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第 116 题:输出以下代码运行结果 #229
Comments
|
11 |
求讲解 |
最后一个不懂 |
"a" + + "b" |
|
|
加性操作符:如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来 所以值为:“11”
乘性操作符:如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值
Javascript中所有对象基本都是先调用 所以两个数组对象的toString方法相加,值为:"1,22,1"
后边的“+”将作为一元操作符,如果操作数是字符串,将调用Number方法将该操作数转为数值,如果操作数无法转为数值,则为NaN。 所以值为:"aNaN" 以上均参考:《Javascript高级程序设计》 |
难度一般 |
"a" + + "b" 相当于 "a" + Number("b") |
mark 一下 |
很基础的题目,不过数组那个case有点不一样,它最后还会再执行join方法进行隐式转换 const arr = [1,2,3]
const { toString, valueOf, join } = arr
arr.toString = function(...args) {
console.log('tostring');
return toString.call(arr, ...args)
}
arr.valueOf = function(...args) {
console.log('valueOf');
return valueOf.call(arr, ...args)
}
arr.join = function(...args) {
console.log('join');
return join.call(arr, ...args)
}
arr + [4,5,6] 更多类型转换相关可见这里 |
稍稍补充一小下:
+true // 1
+false // 0
+undefined // NaN
+null // 0
+'b' // NaN
+'0x10' // 16
+{valueOf: ()=> 5} // 5 |
补充一下:js中一元加的优先级高于2元加,第四问主要考查的是js的运算优先级 |
"11" |
关于第四个为何+“b”等于“NaN”,大家可以参考这里。 原理是:
|
因为一元运算符优先级高。参考 |
这个我知道啊,你说说优先级怎么样? |
mark too |
1 + "1" |
今天的题目还是比较简单
1 + '1' // '1' + '1' -> 11
2 * '2' // 2 * 2 -> 4
[1, 2] + [2, 1] // '1, 2' + '2, 1' -> 1, 22, 1
'a' + + 'b' // 'a' + NaN -> 'aNaN' 另外
let a = 1;
let b = 2;
a + + - + - - + - b // 3
let a = 1;
let b = 2;
a ++ - - ++ b // 1 - -3 -> 4 |
终于有个明白人 一元运算符居然有这么多人不知道 |
console.log( 1 + "1" ) |
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 |
摘抄 |
属性访问 > 一元操作符 > 乘除 > 加减 > 比较 > 相等 > 与运算 > 或运算 > 三目运算 > 赋值运算 |
输出以下代码运行结果
参考:一元正号运算符位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值
|
其实是数组的toString方法里面调用的join方法,而不是本身就调用了join。在你的例子最下面加上console.log('test :>> ', arr.toString());可以看出join也打印了 |
1 - '1' = 0 |
1 + "1" // '11'
2 * "2" // 4
[1, 2] + [2, 1] // '1,22,1'
"a" + + "b" // 'aNaN'
1 + '1' :存在字符串时,+ 会进行字符串拼接
2 * "2" :乘法操作,"2" 会转化为数字,如果转换失败,会是 NaN
[1, 2] + [2, 1]:加法操作,[1, 2] 和 [2, 1] 是对象,会先调用 toString 方法,变成 "1,2" + "2,1"
"a" + + "b":可以分开来看,"a" + (+"b") => "a" + NaN => "aNaN" |
The text was updated successfully, but these errors were encountered: