JavaScript 物件字面量(object literal)
什麼是字面量
用來為變數賦值時的常數量
物件字面量
物件字面值是封閉在花括號對({}
)中的一個物件的零個或多個”屬性名:值
”列表。
var person={
name:"Jack",
age:10,
5:true
};
- 在這個例子中,左邊的花括號(
{
)表示物件字面量的開始,因為它出現在了表示式上下文(expression context
)中。 - JavaScript 中的表示式上下文(
expression context
)指的是能夠返回一個值(表示式)。 - 賦值操作符(
=
)表示後面是一個值,所以左花括號在這裡表示一個表示式的開始。 - 同樣的花括號,如果出現在一個語句上下文(
statement context
)中,例如跟在if
語句條件的後面,則表示一個語句塊的開始。 - 例子中定義了
name
屬性,之後是一個冒號,再後面是這個屬性的值(name:"Jack"
)。在物件字面量中,使用逗號來分隔不同的屬性,因此”Jack”後面是一個逗號。但是,
在age
屬性的值10
的後面不能新增逗號,因為age
是這個物件的最後一個屬性。在最後一個屬性後面新增逗號,會在 IE7及更早版本和Opera 中導致錯誤。 不要忘記結束大括號右邊的(;
)
物件字面量的值可以是任何資料型別包括陣列字面量,函式,巢狀的物件字面量
var Swapper = {
// 陣列字面量(用逗號分隔,所有都要加引號)
images: ["smile.gif", "grim.gif", "frown.gif", "bomb.gif"],
pos: { //巢狀物件字面量
x: 40,
y: 300
},
onSwap: function() { //函式
}
};
- 如果有任何的語法規則被打破,如缺少逗號或冒號或大括號,將會觸發JavaScript錯誤。
- 瀏覽器的錯誤資訊在指出物件字面量語法錯誤的位置一般有幫助,但他們不一定會在指出錯誤的性質完全準確。
在使用物件字面量時,屬性名也可以用字串
var person={
"name":"Jack",
"age":29,
5:true
};
- 上述例子會建立一個物件,包含三個屬性,但這裡的數值屬性名會自動轉換為字串。
- 在通過物件字面量定義物件時,實際上不會呼叫
Object
建構函式(Firefox 2及更早版本會呼叫Object
建構函式;但Firefox3之後就不會了) - 這是因為字面量法建立物件強調該物件僅是一個可變的
hash
對映,而不是從物件中提取的屬性或方法。
建立物件的兩種方法:
使用字面量方法建立物件:var student = {name: "張三"};
使用內建建構函式建立物件:var student = new Object(); student.name = "張三"
。
應該儘量使用字面量發建立物件,其顯著優點在於它只需要輸入更少的字元,除此之外,還有幾點原因:選擇字面量法建立物件強調該物件僅是一個可變的hash
對映,而不是從物件中提取的屬性或方法。
與使用Object
建構函式相比,使用字面量好處在於它並沒有作用域解析。因為可能當以同樣的名字建立一個區域性函式,直譯器需要從棧中呼叫Object
(0的位置開始一直向上查詢作用域鏈,直到發現全域性Object
建構函式。)
建構函式Object
僅接受一個引數,並且還依賴傳遞的值,該Object()
可能會委派另一個內建函式來建立物件,並且返回了一個並非期望的不同物件。(還不確定這句話是否是對的,如果不對希望廣大網友幫忙改正)如將數字、字串、布林值當做引數傳遞給Object
建構函式,其結果是獲得了以不同建構函式所建立的物件,例如:
var oschina = new Object(1); ochina.constructor
ochina.constructor
為Number
;傳遞的值是動態的,直到執行時才確定其型別,這種行為會導致意想不到的結果。 - 雖然可以使用前面介紹的任何一種方法來定義物件,但開發人員更青睞物件字面量語法,因為這種語法要求的程式碼量少,而且能夠給人封裝資料的感覺。實際上,物件字面量也是向函式傳遞大量可選引數的首選方式。
相關文章
- 理解 Go 語言中的組合字面量(Composite Literal)Go
- JavaScript 模板字面量JavaScript
- JavaScript Object 物件JavaScriptObject物件
- JavaScript 模板字面量標籤JavaScript
- javascript-物件objectJavaScript物件Object
- js學習日記-物件字面量JS物件
- [Javascript] template literal tagJavaScript
- JavaScript 基礎之物件ObjectJavaScript物件Object
- JavaScript 反引號模板字面量巢狀JavaScript巢狀
- 談談JavaScript中建立物件(Object)JavaScript物件Object
- JS語言精粹學習筆記--物件字面量JS筆記物件
- javascript如何判斷Object是空物件JavaScriptObject物件
- JavaScript學習四(object物件,陣列,)JavaScriptObject物件陣列
- JavaScript入門④-萬物皆物件:ObjectJavaScript物件Object
- JavaScript十六進位制和八進位制字面量JavaScript
- JavaScript 物件直接量JavaScript物件
- JavaScript 複習之 Object物件的相關方法JavaScriptObject物件
- Swift 字面量講解Swift
- TypeScript 字面量型別TypeScript型別
- TypeScript 字串字面量型別TypeScript字串型別
- TypeScript 之模板字面量型別TypeScript型別
- 關鍵字,保留字,字面量
- Iterable object of JavaScriptObjectJavaScript
- js列印object物件JSObject物件
- javascript-Object.defineProperty()JavaScriptObject
- JavaScript Object.values()JavaScriptObject
- JavaScript Object.entries()JavaScriptObject
- [Javascript] Object property orderJavaScriptObject
- Object物件的屬性Object物件
- C++物件模型:objectC++物件模型Object
- TypeScript 中的字面量是什麼意思TypeScript
- JavaScript Compact Object All In OneJavaScriptObject
- TypeScript 中令人迷惑的物件型別:Object、{} 和 objectTypeScript物件型別Object
- Object物件常用方法總結Object物件
- JavaScript 推薦直接量建立陣列或者物件JavaScript陣列物件
- Javascript中的Object.defineProperty()JavaScriptObject
- Javascript之Object.defineProperty方法JavaScriptObject
- Javascript Object常用方法總結JavaScriptObject