一般來說,'.'運算子和可以相互替代,比如
1 let obj =;45 console.log(obj.name) //
'sena'
6 console.log(obj[name]) //
'sena'
在這之上,我們需要了解關於他們的一些限制
.運算子: 右側必須是乙個屬性名稱命名的簡單識別符號
: 右側必須是乙個計算結果為字串的表示式
先複習一下js中的識別符號:
/*識別符號- 在js中所有的可以由我們自主命名的都可以稱為是識別符號
- 例如:變數名、函式名、屬性名都屬於識別符號
- 命名乙個識別符號時需要遵守如下的規則:
1.識別符號中可以含有字母 、數字 、下劃線_ 、$符號
2.識別符號不能以數字開頭
3.識別符號不能是es中的關鍵字或保留字
4.識別符號一般都採用駝峰命名法
- js底層儲存識別符號時實際上是採用的unicode編碼,
所以理論上講,所有的utf-8中含有的內容都可以作為識別符號
*/
嗯,這裡就可以看出.的缺陷了,如果物件中的屬性剛好不符合識別符號的規範,就不能用.來訪問
比如說:
let obj =console.log(obj.1); //
uncaught syntaxerror: unexpected number
let obj1 = ;
console.log(obj1.star gf); //uncaught syntaxerror
所以這裡只能用
let obj =obj["1"] // 123
let obj1 = ;console.log(obj1['star gf']); // sion
然後我們再來看看
右邊必須是乙個計算結果為字串的表示式,這給了非常強大的功能
let target = 'name';let obj3 =;
//使用變數
console.log(obj3[target]); //
sena
//使用字串拼接
console.log('na' + 'me'); //
sena
如果裡面不是乙個表示式,而是乙個原始值或者物件,事情就開始變得有意思起來了,總結了一下規律大概就是下面兩個
1.如果裡面的是乙個原始值,那麼就直接把原始值變成相應的字串(0 -> '0' , true -> 'true' , null -> 'null', undefined -> 'undefined')(值得注意的是不是呼叫相應包裝類原型上的tostring(),而且undefined和null也沒有包裝類)
2.如果裡面的不是乙個原始值,那麼就呼叫tostring變成字串
/*呼叫tostring的情況*/let obj1 =;
let obj2 =
};let arr5 =;
arr5.tostring = function
();function
fun()
fun.tostring = function
() ;
console.log(obj1[obj2]);
//sena
console.log(obj1[fun]); //
sena
console.log(obj1[arr5]); //
sena
/*直接轉化的情況*/let obj3 =;
/*重寫了包裝類的原型tostring*/
boolean.prototype.tostring = function
();console.log(obj3[1]); //
4console.log(obj3[true]); //
3 這裡可以證明沒有呼叫包裝類上的tostring
console.log(obj3[null]); //
2console.log(obj3[undefined]); //
1
js物件中取屬性值物件 屬性和物件 屬性 的區別
物件的屬性和方法統稱為物件的成員。首先,我們知道 js物件中取屬性值 和 的區別 一般作為靜態物件使用時來訪問屬性。而 表示法在動態訪問屬性時就非常有用。如 var object var name1 object.name var name2 object name 區別 相同點 都可以獲取到obj...
深入了解PHP中的Array陣列和foreach
1.了解陣列 php 中的陣列實際上是乙個有序對映。對映是一種把 values 關聯到 k程式設計客棧eys 的型別。詳細的解釋可參見 php.net中的array陣列 2.例子 一般的陣列 這裡,我通過乙個簡單的例子,並使用圖形方式來了解陣列。a array 3 a 1 b 2 c echo va...
js物件屬性通過「 」和「 」訪問的區別
方法 obj.attr 方法 obj attr 1 點操作符 靜態的。右側必須是乙個以屬性名稱命名的簡單識別符號。屬性名用乙個識別符號來表示。識別符號必須直接出現再js程式中,它們不是資料型別,因此程式無法修改它們。2 中括號操作符 動態的。方括號裡必須是乙個計算結果為字串的表示式,屬性名通過字串表...