深入了解JS中通過 和 獲取物件屬性的區別

2022-06-27 21:27:11 字數 2313 閱讀 2411

一般來說,'.'運算子和可以相互替代,比如

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 中括號操作符 動態的。方括號裡必須是乙個計算結果為字串的表示式,屬性名通過字串表...