@JunQiu
2018-09-18T21:01:38.000000Z
字数 869
阅读 1212
Js中的一些奇怪现象
summary_2018/07
language_js
1、日常工作
- 完成本周周报、月报
- 规范markdown笔记标签规则
- js趣谈:special situation
2、技术学习
js趣谈:special situation
- typeof NaN ->'numbnr' NaN(though not a number)
- 9999999999999999->在浏览器中输出进一位,0.5+0.1==0.6,0.1+0.2!=0.3(js所有数字都是以64位浮点数形式储存(IEEE754),某些运算只有整数才能完成,此时 JavaScript会自动把64位浮点数,转成32位整数,具体原因查看IEEE754标准/js数值的表示) 详见:js数值的表示
- Math.max()/min()->If no arguments are given, the result is -Infinity.
- []+[]/[]+{}/true+true+true/true-true/true==1/true===1/9+'1'/91-'1'/[]==0 -> 参阅js自动类型转换/JavaScript中的{} + {}是什么?、js隐式装箱-ToPrimitive
- 在加法的过程中,首先把等号左右两边进行了求原值ToPrimitive()操作,然后如果两个原值只要有一个是String类型,就把两个原值都进行转化字符串ToString()操作,进行字符串拼接;否则把两个原值都进行转化数字ToNumber()操作,进行数字相加。
- 除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算自动转成数值。(当然还有布尔值的转换)
- {}+[] -> { } + [ ]被解析成了{ };+[ ],前面是一个空代码块被略过,剩下+[ ]就成了一元运算。[ ]的原值是””, 将””转化成Number结果是0。
3、思考与总结
- 对于规范化有了更加深刻的亲身体验,可维护性十分重要,比如自己的markdown笔记的标签起初比较少的时候并没有什么感觉,但是现在越来越多之后,发现越来越乱,十分难维护,因此确定标签的命名规则十分重要。