本文整理了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