javascript 之 数据类型基础(重新认识运算符) 习题解惑 nan
感想:总以为自己懂了,其实我们只是懂了自己局限的东西,用的时候又总是出错,尝试去做习题和面试题能提高自己对这知识点的重新认知.
建议学习方式:吸收的特别快,可以立马做题练习,若是慢,就可以不用管,等计划学完后请记得回过头来看看,那些宝藏等着你去开启)
接下来,请重新去学习基础,重新认识它
概念:参数 = 运算元
运算元 —— 运算符应用的对象。比如说乘法运算 5 * 2,有两个运算元:左运算元 5 和右运算元 2。有时候人们也称其为“参数”而不是“运算元
根据运算元的个数分为:
一元运算符:案例: +1 //1
二元运算符:案例 1+1 //2
三元运算符:表达式?式子:式子 案例: true?1:0
常见的运算符
加法 +, 减法 -, 乘法 *, 除法 /, 取余 %, 求幂 **. // a**b 解释: a乘以自身b次 案例 2**3 => 2*2*2 =8
二元运算符+连接字符串 (注意: 仅仅是+符号很特殊,其他的符号都会优先将 运算元 转为数字)
'1' + 2 // '12' 2 + '1' // '12' 结论: 二元运算符 只要用 + 符号,只要至少一边为 字符串,那么就是字符串拼接
特殊情况
alert(2 + 2 + '1' ); // "41",不是 "221"
强调: 二元 +
是唯一一个以这种方式支持字符串的运算符。其他算术运算符只对数字起作用,并且总是将其运算元转换为数字
先给个糖果,什么值 为false
答案: 0 null undefined false '' NaN 共六种
做题:
+1 // 1 +-2 // -2
// 注释: console.log(--2) 和 console.log(++2) 都会报错,也就是说,
但是 let num=2; console.log(--num) 和 console.log(++num)不会报错,很神奇,有点不懂
let apples = "2"; let oranges = "3";
// 在二元运算符加号起作用之前,所有的值都被转化为了数字 alert( +apples + +oranges ); // 5
运算符优先级
逗号运算符
let a = (1 + 2, 3 + 4); alert( a ); // 7(3 + 4 的结果) 如果没有圆括号:a = 1 + 2, 3 + 4 会先执行 +,将数值相加得到 a = 3, 7,然后赋值运算符 = 执行, ‘a = 3’,然后逗号之后的数值 7 不会再执行,它被忽略掉了。相当于 (a = 1 + 2), 3 + 4。
坑点来了
"" + 1 + 0 // "" - 1 + 0 true + false 6 / "3" "2" * "3" 4 + 5 + "px" "$" + 4 + 5 "4" - 2 "4px" - 2 7 / 0 " -9 " + 5 " -9 " - 5 null + 1 undefined + 1 " \t \n" - 2
答案
"" + 1 + 0 = "10" // (1) "" - 1 + 0 = -1 // (2) true + false = 1 6 / "3" = 2 "2" * "3" = 6 4 + 5 + "px" = "9px" "$" + 4 + 5 = "$45" "4" - 2 = 2 "4px" - 2 = NaN 7 / 0 = Infinity " -9 " + 5 = " -9 5" // (3) " -9 " - 5 = -14 // (4) null + 1 = 1 // (5) undefined + 1 = NaN // (6) " \t \n" - 2 = -2 // (7)
解析
- 到
"1" + 0
,再次应用同样的规则得到最终的结果。 - 减法
-
(像大多数数学运算一样)只能用于数字,它会使空字符串""
转换为0
。 - 带字符串的加法会将数字
5
加到字符串之后。 - 减法始终将字符串转换为数字,因此它会使
" -9 "
转换为数字-9
(忽略了字符串首尾的空格)。 null
经过数字转换之后会变为0
。undefined
经过数字转换之后会变为NaN
。- 字符串转换为数字时,会忽略字符串的首尾处的空格字符。在这里,整个字符串由空格字符组成,包括
\t
、\n
以及它们之间的“常规”空格。因此,类似于空字符串,所以会变为0
。
推荐的网站,很棒的网站,里面有些习题能够帮助我们真正的去理解它
https://zh.javascript.info/operators