JS類型
原始類型
數(shù)字 字符串 布爾值 null undefined
對(duì)象類型
Object
(這些都是Object的子類)Function Array Date Math
RegExp Number String Boolean
值
NaN Infinity
Js中運(yùn)算上溢和下溢(計(jì)算結(jié)果無(wú)限接近于0,但比JS能表示的最小值還小時(shí)發(fā)生的一種情景)都不報(bào)錯(cuò)會(huì)得到無(wú)窮大Infinity和0。負(fù)數(shù)下溢得到-0.
0/0 結(jié)果為NaN 4/0 為Infinity
判斷是不是NaN x!=x 若為true則x為NaN 或者用isNaN(x) Infinity和
-Infinity不是NaN
布爾值
null undefined 0 -0 NaN ''" " "(空字符串和只有空格的字符串) 以上都會(huì)被轉(zhuǎn)換為false。(但是""和" "的長(zhǎng)度是不一樣的)" "==false; //為true " ".length=1
其他所有值,空數(shù)組,空對(duì)象等都會(huì)被轉(zhuǎn)換為true
嚴(yán)格相等運(yùn)算符 === 不進(jìn)行類型轉(zhuǎn)換 必須要類型和值都相等才為true
null == undefined //true
null === undefined //false
!!null 隱式類型轉(zhuǎn)換
包裝對(duì)象
數(shù)字 字符串 布爾值 的包裝對(duì)象分別為Number String Boolean
存取字符串、數(shù)字或布爾值的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象稱為包裝對(duì)象,臨時(shí)對(duì)象在使用完之后會(huì)馬上銷毀。當(dāng)下次再存取字符串等的屬性時(shí)又會(huì)重新新建一個(gè)臨時(shí)對(duì)象。
包裝對(duì)象可以顯示的創(chuàng)建
var s=new String('xxx');
原始值和對(duì)象引用
原始值是不能改變的,字符串是返回的新的字符串,原字符串是沒(méi)改變的。
對(duì)象的值是可以修改的。
兩個(gè)單獨(dú)的對(duì)象或數(shù)組永不相等
var a=[]; b=[];
a==b ; //false
a===b; //false
a=b;
a===b//true 對(duì)象數(shù)組的比較其實(shí)是引用變量的比較,當(dāng)兩個(gè)引用變量都指向同一個(gè)數(shù)組或?qū)ο髸r(shí)則相等
變量聲明
var x; //聲明一個(gè)變量但是沒(méi)初始化
var a=1;//初始化變量
給未聲明的變量直接賦值,在嚴(yán)格模式下報(bào)錯(cuò),在非嚴(yán)格模式下,會(huì)給全局對(duì)象創(chuàng)建一個(gè)同名的屬性。
b=1;
window.b //1
作用域
全局作用域和函數(shù)作用域 (ES6中有塊級(jí)作用域)
在函數(shù)內(nèi)聲明的變量只在函數(shù)內(nèi)有定義,在局部作用域里局部變量會(huì)覆蓋重名的全局變量。
函數(shù)作用域的聲明提前
在函數(shù)作用域內(nèi)聲明的所有變量在函數(shù)體內(nèi)都是可見(jiàn)的。這意味著變量在聲明之前就已經(jīng)可用了
function f(){
console.log(a); //輸出undefined
var a=1;
}
雖然聲明會(huì)提前,但是變量的賦值還是在原賦值語(yǔ)句處。