本文整理了JavaScript中容易出错,或者易被忽略的知识点。
1. String是不可变类型
字符串类型String是不可变类型,也就是说,字符串本质上是不能改变的。
var s1 = "abc";
var s2 = s1;
s2+="ef";
console.log(s1); // "abc"
// 这个例子,也可以从“简单类型的赋值是值赋值”角度来分析
2. null类型是一个假对象
null是对象类型,typeof null === "object"
,含义为“没有任何对象引用”。注意,这点和undefined
不同,undefined
值变量没有初始化赋值。
null没有对应的Null
类,因此,它无法继承Object
原型上的任何方法。
null.toString(); // Uncaught TypeError: Cannot read property 'toString' of null
3. 为什么简单类型字符串可以调用方法?
声明一个字符串var str = "abc";
,调用方法str.toUpperCase()
将其转为大写,这时,字符串会先隐式转换为字符串对象,然后调用String.proptype
上面的toUpperCase方法。
4. 两个不同类型的值如何做相等判断?
如果是其中一个值是简单类型,那么,将两者都隐式转换为数值类型之后,再根据数值比较大小。
如果一方为字符串值,另一方为对象引用,那么,调用Object.toString()
将对象引用转为字符串之后,再对两个字符串内容进行比较。
5. <a href="javascript:void(0)">为什么会阻止页面跳转?
如果href属性中的表达式有值,a标签将其认为是有效的url并跳转到该页面。
如果href属性设置为undefined,a标签认为是无效url,不会跳转。
<!-- 发生跳转-->
<a href="null">click me</a>
<!-- 不发生跳转-->
<a href="">click me</a>
void是一个操作符,该操作符指定要计算一个表达式但是不返回值。所以,<a href="javascript:void(0)">
的返回值为undefined
,点击a标签不会发生页面跳转。常用如下方式提交表单:
<a href="javascript:void(document.form.submit())">
6. 0.1 + 0.2 != 0.3
JavaScript采用“IEEE 754 标准定义的双精度64位格式”表示数字,所以,JavaScript不区分整数值和浮点值,所有数字都用浮点值表示。
测试结果为:
0.1 + 0.2 === 0.30000000000000004