字符串
字符串默認只能寫在一行內(nèi)千劈,分成多行將會報錯梯码。
如果長字符串必須分成多行,可以在每一行的尾部使用反斜杠厨疙。
length屬性返回字符串的長度洲守,該屬性也是無法改變的。
btoa():任意值轉(zhuǎn)為 Base64 編碼
atob():Base64 編碼轉(zhuǎn)為原來的值
//不適合非 ASCII 碼的字符,若要使用必須先經(jīng)過轉(zhuǎn)碼
function b64Encode(str) {
return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
轉(zhuǎn)義
反斜杠(\)在字符串內(nèi)有特殊含義梗醇,用來表示一些特殊字符知允,所以又稱為轉(zhuǎn)義符。
- \0 :null(\u0000)
- \f :換頁符(\u000C)
- \n :換行符(\u000A)
- \r :回車鍵(\u000D)
- \t :制表符(\u0009)
- ' :單引號(\u0027)
- " :雙引號(\u0022)
- \ :反斜杠(\u005C)
反斜杠的三種特殊用法:
1.反斜杠后面緊跟三個八進制數(shù)(000到377)叙谨,代表一個字符温鸽。
2.\x后面緊跟兩個十六進制數(shù)(00到FF),代表一個字符手负。
3.u后面緊跟四個十六進制數(shù)(0000到FFFF)涤垫,代表一個字符。
字符串可以被視為字符數(shù)組竟终,因此可以使用數(shù)組的方括號運算符雹姊,用來返回某個位置的字符(位置編號從0開始)。但是不能像數(shù)組一樣改變和增刪衡楞。
對象
對象就是一組“鍵值對”(key-value)的集合吱雏,是一種無序的復合數(shù)據(jù)集合。
對象的所有鍵名都是字符串瘾境。如果鍵名是數(shù)值歧杏,會被自動轉(zhuǎn)為字符串。如果不是純數(shù)字迷守,且不符合標識符的命名規(guī)范犬绒,則會報錯。
鏈式引用
對象屬性的值還是一個對象兑凿,就形成了鏈式引用凯力。
屬性可以動態(tài)創(chuàng)建,不必在對象聲明時就指定礼华。
讀取對象的屬性咐鹤,有兩種方法,一種是使用點運算符圣絮,還有一種是使用方括號運算符祈惶。如果使用方括號運算符,鍵名必須放在引號里面扮匠,否則會被當作變量處理捧请。
數(shù)值鍵名不能使用點運算符(因為會被當成小數(shù)點),只能使用方括號運算符棒搜。
查看一個對象本身的所有屬性疹蛉,可以使用Object.keys方法。
刪除對象屬性
delete命令用于刪除對象的屬性力麸,刪除成功后返回true可款。
delete obj.p // true
刪除一個不存在的屬性育韩,delete不報錯,而且返回true筑舅。
該屬性存在座慰,且不得刪除陨舱,delete命令會返回false翠拣。
delete命令只能刪除對象本身的屬性,無法刪除繼承的屬性游盲。
var obj = {};
delete obj.toString // true
obj.toString // function toString() { [native code] }
in 運算符
in運算符用于檢查對象是否包含某個屬性误墓,如果包含就返回true,否則返回false益缎。
in運算符的一個問題是谜慌,它不能識別哪些屬性是對象自身的,哪些屬性是繼承的莺奔。就像上面代碼中欣范,對象obj本身并沒有toString屬性,但是in運算符會返回true令哟,因為這個屬性是繼承的恼琼。
對象的hasOwnProperty方法判斷一下,是否為對象自身的屬性屏富。
ar obj = {};
if ('toString' in obj) {
console.log(obj.hasOwnProperty('toString')) // false
}
for...in 循環(huán)
for...in循環(huán)用來遍歷一個對象的全部屬性晴竞。
for...in循環(huán)有兩個使用注意點:
- 它遍歷的是對象所有可遍歷(enumerable)的屬性,會跳過不可遍歷的屬性狠半。
- 它不僅遍歷對象自身的屬性噩死,還遍歷繼承的屬性。
對象obj繼承了toString屬性神年,該屬性不會被for...in循環(huán)遍歷到已维,因為它默認是“不可遍歷”的。
只想遍歷對象自身的屬性已日,所以使用for...in的時候,應該結(jié)合使用hasOwnProperty方法捂敌,在循環(huán)內(nèi)部判斷一下艾扮,某個屬性是否為對象自身的屬性。
var person = { name: '老張' };
for (var key in person) {
if (person.hasOwnProperty(key)) {
console.log(key);
}
}// name
with 語句
with (對象) {
語句;
}
作用是操作同一個對象的多個屬性時占婉,提供一些書寫的方便泡嘴。
如果with區(qū)塊內(nèi)部有變量的賦值操作,必須是當前對象已經(jīng)存在的屬性逆济,否則會創(chuàng)造一個當前作用域的全局變量酌予。