JavaScript 物件的屬性鍵(Key)可以為空嗎?
阿新 • • 發佈:2019-01-08
1、JavaScript 物件的屬性(Key)可以為空嗎?比如:
var obj = {
"": "Zhangshan"
}
答案是肯定的。2、那麼JS物件的屬性KEY 能為null嗎?
var obj = {
null: "Zhangshan"
}
答案是否定的。
3、那麼JS物件的屬性KEY能為數字嗎(非字串)?
var obj = {
1: "Zhangshan"
}
答案是可以,但是數字型仍然會被當做字串看待。使用obj[1]可以訪問KEY(1),當然也可以使用obj['1']訪問KEY(1)。4、JS物件的屬性KEY能為undefined嗎(非字串)?
var obj = { undefined: "Zhangshan" }
答案是可以,undefined會被當做字串看待。可以使用obj['undefined']訪問KEY(undefined),也可以使用obj[undefined]訪問KEY (undefined),同理NaN也可以作為JS物件的屬性KEY。
5、JS物件的屬性KEY能為物件嗎?
var myObj = {
department: 'R&D'
};
var obj = {
myObj: 'Wangmazhi'
}
答案是不可以,該例子中myObj會被當做字串“myObj”,跟前面定義的物件myObj不再有關係。
如果換種方式,不是直接使用物件做KEY,而是通過賦值的方式來將物件設定為KEY:
<script lang="javascript"> //列印輸出 function println(str){ document.writeln(str + "<br/>"); } var obj1 = { name: 'Zhangshan' } var obj2 = { department: 'R&D' } var obj3 = { age:30 } var myObj = {}; myObj[obj1] = 'test is ok!'; myObj[obj2] = 'wahaha' myObj[obj3] = 'Chinese people are great!'; for(var item in myObj){ println("typeof item is:" + typeof(item) + ",value:" + item ); if(typeof item == 'object'){ pintln('item is object'); } println(item + "=" + myObj[item]); } </script>
輸出:
typeof item is:string,value:[object Object]
[object Object]=Chinese people are great!
可以看到物件最終被轉換為字串"[object object]",不再是object型別,如果使用使用多個不同的物件作為KEY,則它們會相互覆蓋,最終只有一個屬性KEY ------"[object object]",所以將物件用作屬性KEY是沒有意義的。測試示例:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>Empty key test</title> </head> <body> <script lang="javascript"> //列印輸出 function println(str){ document.writeln(str + "<br/>"); } //列印錯誤訊息 function logerror(e){ var str = '<span style="color:red;">' + 'errorCode:' + e.number +',errorType:' + e.name + ',errorMessage:' + e.message + '</span>' println(str); } //測試資料 var myObj = { department: 'R&D' }; //測試資料 var config = { views:{ '': { controller: 'ReplicationControllerListController', controllerAs: '$ctrl', templateUrl: 'replicationcontroller/list/list.html' }, '1':{ name:'Zhangshan' }, 1:{ name:'Lishi' }, undefined:{ name:'Zhaoliu' }, myObj: { name:'Wangmazhi' }, NaN : { name: 'Sunwuming' } // ,null:{ // name:'Wangwu' // } } }; /* *列印KEY型別 */ function test1(){ println("-------------------------"); var i=0; for(var item in config.views){ println(i + ':' + item + ',type:' + typeof(item)); if(item == undefined){ println("undefined here!"); } else if(item == 'undefined') { println("'undefined' is string!"); } i++; } println("-------------------------"); } //測試KEY取值 function test2(){ println(config.views[''].templateUrl); println(config.views['1'].name); println(config.views[1].name); //println(config.views[2].name); println(config.views[undefined].name); println(config.views['undefined'].name); println(config.views['myObj'].name); println('config.views[myObj]:' + typeof(config.views[myObj])); try{ println(config.views[myObj].name); }catch(e){ logerror(e); } println(config.views[NaN].name); println(config.views['NaN'].name); } test1(); test2(); </script> </body> </html>
輸出:
-------------------------
0:1,type:string
1:,type:string
2:undefined,type:string
'undefined' is string!
3:myObj,type:string
4:NaN,type:string
-------------------------
replicationcontroller/list/list.html
Lishi
Lishi
Zhaoliu
Zhaoliu
Wangmazhi
config.views[myObj]:undefined
errorCode:-2146823281,errorType:TypeError,errorMessage:無法獲取未定義或 null 引用的屬性“name”
Sunwuming
Sunwuming