一绰精、變量定義
ECMAScript的變量是松散類(lèi)型的级野,所謂的松散類(lèi)型班眯,就是可以用來(lái)保存任何類(lèi)型的數(shù)據(jù)蕊蝗,例如:
var message = "Hello World";?
var num = 10;
當(dāng)然狮辽,我們也可以不賦予初始值一也,例如:var data巢寡; 這樣,我們便定義data椰苟,但是data并未被初始化抑月,因此會(huì)被默認(rèn)保存一個(gè)特殊的值 —— undefined。
用var操作符定義的變量將成為定義改變量的作用域的局部變量舆蝴。也就是說(shuō)如果再函數(shù)中使用var定義一個(gè)變量谦絮,那么這個(gè)變量在函數(shù)退出后便會(huì)被銷(xiāo)毀。省略var操作符時(shí)洁仗,變量就成了全局變量层皱,當(dāng)然var也可以定義全局變量,但是不推薦甚至禁止創(chuàng)建全局變量赠潦。
在ES6中叫胖,有了let和const之后,便可以不再使用var操作符了她奥,理由是var會(huì)造成變量提升瓮增,而且var能夠重復(fù)定義相同變量,會(huì)造成混亂方淤,let和const能避免這個(gè)問(wèn)題钉赁。
二蹄殃、數(shù)據(jù)類(lèi)型
基本數(shù)據(jù)類(lèi)型:Undefined携茂、Null、Boolean诅岩、String讳苦、Number(在ES6中新增了另一種基本數(shù)據(jù)類(lèi)型 —— Symbol)
復(fù)雜數(shù)據(jù)類(lèi)型:Object
三、數(shù)據(jù)類(lèi)型的檢測(cè)
1. typeof:不能檢測(cè)到null類(lèi)型吩谦,typeof鸳谜;
2. null會(huì)返回"object";
3. instanceof:用來(lái)判斷A是否是B的實(shí)例式廷,表達(dá)式為A instanceof B咐扭,但是無(wú)法判斷數(shù)組是Array還是Object(雖然數(shù)組也是對(duì)象),例如[] instanceof Array返回true滑废,而[] instanceof Object 也是返回true蝗肪。可以結(jié)合ES5新增的Array.isArray()方法判斷具體是數(shù)組還是對(duì)象蠕趁;
4. constructor:不能檢測(cè)到null和undefined薛闪,因?yàn)檫@兩個(gè)是無(wú)效的對(duì)象,并且constructor是不穩(wěn)定的俺陋,這個(gè)主要體現(xiàn)在自定義對(duì)象上豁延,當(dāng)開(kāi)發(fā)者重寫(xiě) prototype 后昙篙,原有的 constructor 引用會(huì)丟失,constructor會(huì)默認(rèn)為 Object诱咏;
5. toString:比較好的判斷方法苔可,Object的原型方法,調(diào)用該方法胰苏,默認(rèn)返回當(dāng)前對(duì)象的 [class] 硕蛹。這是一個(gè)內(nèi)部屬性,其格式為 [object xxx] 硕并,其中 xxx就是對(duì)象的類(lèi)型法焰。例如:Object.prototype.toString.call(1)返回[object Number]
四、null和undefined
當(dāng)一個(gè)變量被聲明時(shí)倔毙,這個(gè)變量的默認(rèn)值就是undefined埃仪,而當(dāng)一個(gè)變量為null時(shí),則代表著這個(gè)變量的值是一個(gè)空指針對(duì)象陕赃。簡(jiǎn)單來(lái)說(shuō)就是卵蛉,聲明但未賦值,就是undefined么库,null則是有值傻丝,值為null(空指針)
五、Boolean
Boolean只有兩個(gè)字面值:true和false诉儒,這兩個(gè)數(shù)值與數(shù)字值不是一回事葡缰,因此true不一定等于1,false也不一定等于0.可以這么理解忱反,存在為true泛释,不存在為false,成立為true温算,不成立為false怜校。要將某個(gè)非布爾值轉(zhuǎn)化成布爾值,可以用Boolean()方法注竿。
六茄茁、Number
最基本的數(shù)值字面量格式為十進(jìn)制整數(shù),就是我們常用的1巩割,2裙顽,3,4喂分,5等等锦庸;除此之外,還可以用八進(jìn)制或十六進(jìn)制表示蒲祈,但是八進(jìn)制在嚴(yán)格模式(use stric)下無(wú)效甘萧,算術(shù)計(jì)算時(shí)萝嘁,都將轉(zhuǎn)化成十進(jìn)制進(jìn)行運(yùn)算。
浮點(diǎn)數(shù)的精度最高達(dá)到17位扬卷,但是在運(yùn)算時(shí)其精度遠(yuǎn)遠(yuǎn)不如整數(shù)牙言,例如:0.1 + 0.2 = 0.300000000000000004。因此怪得,永遠(yuǎn)不要測(cè)試某個(gè)特定浮點(diǎn)數(shù)值咱枉,當(dāng)然這并非ECMAScript獨(dú)有的問(wèn)題,這是基于IEEE754數(shù)值的浮點(diǎn)計(jì)算的通病徒恋。
NaN是一個(gè)特殊的數(shù)值(Not a Number)蚕断,這個(gè)數(shù)值用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況。例如0除以0都會(huì)導(dǎo)致錯(cuò)誤入挣,此時(shí)會(huì)返回NaN亿乳。
任何涉及NaN的操作都會(huì)返回NaN;NaN與任何數(shù)值都不相等径筏;包括它自己本身(NaN == NaN返回false)葛假;實(shí)際上,只有0除以0才會(huì)返回NaN滋恬,正數(shù)除以0返回Infinity(正無(wú)窮)聊训,負(fù)數(shù)除以0返回-Infinity(負(fù)無(wú)窮);isNaN()方法能檢測(cè)變量是否不是數(shù)值恢氯,即可以用來(lái)判斷變量是否能轉(zhuǎn)化成數(shù)字带斑,如isNaN('blue')返回true,isNaN(true)返回false
將其他非數(shù)值類(lèi)型轉(zhuǎn)化為數(shù)值類(lèi)型的方法有三種:Number()酿雪、parseInt()遏暴、parseFloat()侄刽,Number()可以用于任何數(shù)據(jù)類(lèi)型指黎,而另外兩個(gè)則專門(mén)用于把字符串轉(zhuǎn)換成數(shù)值。這三個(gè)函數(shù)對(duì)于相同的輸入會(huì)有不同的結(jié)果州丹,所以轉(zhuǎn)換時(shí)請(qǐng)選擇正確的方法去使用醋安。
七、String
字符串可由英文的引號(hào)('')和雙引號(hào)("")表示墓毒,以什么符號(hào)開(kāi)始吓揪,就以什么符號(hào)結(jié)束,如以雙引號(hào)開(kāi)始就以雙引號(hào)結(jié)束("Hello World")所计。
有一些特殊的字符串顯示需要轉(zhuǎn)義柠辞,例如該字符串中含有單引號(hào)則需要加上斜杠,例如:'\'Hello World\''
ECMAScript中的字符串是不可變的主胧,也就是說(shuō)叭首,字符串一旦創(chuàng)建习勤,它們的值就不能再改變,要改變焙格,首先要銷(xiāo)毀原來(lái)的字符串图毕,然后再用另一個(gè)字符串填充該變量
要把一個(gè)值轉(zhuǎn)換成字符串的方法有兩種,一種是使用toString()方法眷唉,另一種予颤,則是把該值與一對(duì)雙引號(hào)或單引號(hào)加在一起(10 + "3" = "103")
八、Object
ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合冬阳,對(duì)象可以通過(guò)執(zhí)行new操作符后跟要?jiǎng)?chuàng)建的對(duì)象類(lèi)型的名稱來(lái)創(chuàng)建蛤虐,如:var o = new Object(),圓括號(hào)可以省略但是不推薦肝陪;ECMAScript中Object類(lèi)型是所有它的實(shí)例的基礎(chǔ)笆焰,換句話說(shuō),Object類(lèi)型所具有的任何屬性和方法同樣也存在于更具體的對(duì)象中见坑。
Object每個(gè)實(shí)例都具有下列的屬性和方法:
constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)嚷掠。
hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前的對(duì)象實(shí)例中(而不是在實(shí)例原型中)是否存在
isProptoTypeOf(object):用于檢查傳入的對(duì)象是否是傳入對(duì)象的原型。
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語(yǔ)句荞驴。
toLocaleString():返回對(duì)象的字符串表示不皆,該字符串與執(zhí)行環(huán)境地區(qū)相對(duì)應(yīng)。
toString():返回對(duì)象的字符串表示熊楼。
valueOf():返回對(duì)象的字符串霹娄、數(shù)值或布爾值表示,通常與toString()的返回值相同鲫骗。