wangduanduan / wangduanduan.github.io

Wubba Lubba dub-dub
https://wdd.js.org
27 stars 7 forks source link

JavaScript最难搞的知识点 #189

Closed wangduanduan closed 5 years ago

wangduanduan commented 5 years ago

== 和 ===

一般情况下,我是会不会使用==符号的,因为这个符号会做隐式类型转换,为了避免心智负担,如果遇到==,我的格式校验工具会直接提示错误。

2.0 和 2 数值的难题

JavaScript的数值类型有两种,整数和浮点数。由于保存浮点数值需要的内存是整数的两倍,因此,有些小数点后是0的数值,实际上会被当做整数存储。

字符串和数值隐式类型转换

字符串和数值相加,数值会首先被转换成字符串,然后两个字符串拼接在一起。

在此我就抬个杠,为什么不把字符串转成数值,然后用数值方法相加。在此我自己推测,在JavaScript的各种类型的变量中,除了null和undefined外,每个变量都有toString方法。也就是说,几乎每个变量都能转换成字符串,但是能转成数值的字符串却很小的。而且大部分转不成数值的字符串会被转成NaN,NaN和一直数值相加,还是NaN,这样做显然没啥意义。

2 + '2' = ?

一直记不住的substr和substring

每次当我记不住这两个区别的时候,我就看看我的这篇文章。《追本溯源:substr与substring历史漫话》 #139

substr原型可能继承C++, substring原型可能继承Java。虽然这两个函数的名字很难区分,但是含义却是从其他语言中可以找到蛛丝马迹。

从两个函数名中很难区分,只能从函数签名上区分。另外根据mdn的建议,substr未来可能会被移除,建议使用substring替代substr。

Warning: Although String.prototype.substr(…) is not strictly deprecated (as in "removed from the Web standards"), it is considered a legacy function and should be avoided when possible. It is not part of the core JavaScript language and may be removed in the future. If at all possible, use the substring() method instead.

一直记不住的call 和 apply