## 一、概述
### 1.1 生成方法
對象(object)是 JavaScript 語言的核心概念,也是最重要的數據類型。
什么是對象?簡單說,對象就是一組“鍵值對”(key-value)的集合,是一種無序的復合數據集合。
~~~
var obj = {
foo: 'Hello',
bar: 'World'
};
~~~
上面代碼中,大括號就定義了一個對象,它被賦值給變量`obj`,所以變量`obj`就指向一個對象。該對象內部包含兩個鍵值對,第一個鍵值對是`foo: 'Hello'`,其中`foo`是“鍵名”,字符串`Hello`是“鍵值”。鍵名與鍵值之間用冒號分隔。第二個鍵值對是`bar: 'World'`,`bar`是鍵名,`World`是鍵值。兩個鍵值對之間用逗號分隔。
### 1.2 鍵名
對象的所有鍵名都是字符串。上面的代碼也可以寫成下面這樣。
~~~
var obj = {
'foo': 'Hello',
'bar': 'World'
};
~~~
如果鍵名是數值,會被自動轉為字符串。
~~~
var obj = {
1: 'a',
3.2: 'b',
1e2: true,
1e-2: true,
.234: true,
0xFF: true
};
obj['100'] // true
~~~
上面代碼中,對象`obj`的所有鍵名雖然看上去像數值,實際上都被自動轉成了字符串。
如果鍵名不符合標識名的條件(比如第一個字符為數字,或者含有空格或運算符),且也不是數字,則必須加上引號,否則會報錯。
~~~
// 報錯
var obj = {
1p: 'Hello World'
};
// 不報錯
var obj = {
'1p': 'Hello World',
'h w': 'Hello World',
'p+q': 'Hello World'
};
~~~
對象的每一個鍵名又稱為“屬性”(property),它的“鍵值”可以是任何數據類型。如果一個屬性的值為函數,通常把這個屬性稱為“方法”,它可以像函數那樣調用。
~~~
var obj = {
p: function (x) {
return 2 * x;
}
};
obj.p(1) // 2
~~~
### 1.3 對象的引用
如果不同的變量名指向同一個對象,那么它們都是這個對象的引用,也就是說指向同一個內存地址。修改其中一個變量,會影響到其他所有變量。
~~~
var o1 = {};
var o2 = o1;
o1.a = 1;
o2.a // 1
o2.b = 2;
o1.b // 2
~~~
上面代碼中,`o1`和`o2`指向同一個對象,因此為其中任何一個變量添加屬性,另一個變量都可以讀寫該屬性。
但是,這種引用只局限于對象,如果兩個變量指向同一個原始類型的值。那么,變量這時都是值的拷貝。
~~~
var x = 1;
var y = x;
x = 2;
y // 1
~~~
## 二、屬性的操作
### 2.1 屬性的讀取
讀取對象的屬性,有兩種方法,一種是使用點運算符,還有一種是使用方括號運算符。
~~~
var obj = {
p: 'Hello World'
};
obj.p // "Hello World"
obj['p'] // "Hello World"
~~~
請注意,如果使用方括號運算符,鍵名必須放在引號里面,否則會被當作變量處理。
~~~
var foo = 'bar';
var obj = {
foo: 1,
bar: 2
};
obj.foo // 1
obj[foo] // 2
~~~
數字鍵可以不加引號,因為會自動轉成字符串。
~~~
var obj = {
0.7: 'Hello World'
};
obj['0.7'] // "Hello World"
obj[0.7] // "Hello World"
~~~
### 2.2 屬性的賦值
點運算符和方括號運算符,不僅可以用來讀取值,還可以用來賦值。
~~~
var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';
~~~
JavaScript 允許屬性的“后綁定”,也就是說,你可以在任意時刻新增屬性,沒必要在定義對象的時候,就定義好屬性。
~~~
var obj = { p: 1 };
// 等價于
var obj = {};
obj.p = 1;
~~~
### 2.3 屬性的查看
查看一個對象本身的所有屬性,可以使用`Object.keys`方法。
~~~
var obj = {
key1: 1,
key2: 2
};
Object.keys(obj);
// ['key1', 'key2']
~~~
- 階段一 Java 零基礎入門
- 步驟1:基礎語法
- 第01課 初識
- 第02課 常量與變量
- 第03課 運算符
- 第04課 選擇結構
- 第05課 循環結構
- 第06課 一維數組
- 第08課 方法
- 第09課 數組移位與統計
- 第10課 基礎語法測試
- 第09課 基礎語法測試(含答案)
- 步驟2:面向對象
- 第01課 類和對象
- 第02課 封裝
- 第03課 學生信息管理
- 第04課 繼承
- 第05課 單例模式
- 第06課 多態
- 第07課 抽象類
- 第08課 接口
- 第09課 內部類
- 第10課 面向對象測試
- 第10課 面向對象測試(含答案)
- 步驟3:常用工具類
- 第01課 異常
- 第02課 包裝類
- 第03課 字符串
- 第04課 集合
- 第05課 集合排序
- 第06課 泛型
- 第07課 多線程
- 第08課 輸入輸出流
- 第09課 案例:播放器
- 第10課 常用工具測試(一)
- 第10課 常用工具測試(一)(答案)
- 第10課 常用工具測試(二)
- 第10課 常用工具測試(二)(答案)
- 階段二 從網頁搭建入門 JavaWeb
- 步驟1:HTML 與 CSS
- 第01課 HTML 入門
- 第01課 HTML 入門(作業)
- 第02課 CSS 入門
- 第02課 CSS 入門(作業)
- 第03課 CSS 布局
- 第03課 CSS 布局(作業)
- 步驟2:JavaScript 與前端案例
- 第01課 JavaScript 入門
- 第01課 JavaScript 入門(作業)
- 第02課 仿計算器
- 第03課 前端油畫商城案例
- 第04課 輪播圖
- 第05課 網頁搭建測試
- 第05課 網頁搭建測試(含答案)
- 步驟3:JavaScript 教程
- 入門
- 概述
- 基本語法
- 數據類型
- 概述
- 數值
- 字符串
- undefined, null 和布爾值
- 對象
- 函數
- 數組
- 運算符
- 算術運算符
- 比較運算符
- 布爾運算符
- 位運算符
- 運算順序
- 語法專題
- 數據類型的轉換
- 錯誤處理機制
- 標準庫
- String
- Date
- Math
- DOM
- 概述
- Document 節點
- 事件
- EventTarget 接口
- 事件模型
- 常見事件
- 階段三 數據庫開發與實戰
- 步驟1:初始數據庫操作
- 第01課 數據類型
- 第02課 表的管理
- 第03課 數據管理
- 第04課 常用函數
- 第05課 JDBC 入門
- 第06課 Java 反射
- 第07課 油畫商城
- 第08課 數據庫基礎測試
- 步驟2:MyBatis 從入門到進階
- 第01課 IntelliJ IDEA 開發工具入門
- 第02課 Maven 入門
- 第03課 工廠模式
- 第04課 MyBatis 入門
- 第05課 MyBatis 進階
- 第06課 商品信息管理
- 第07課 MyBatis 基礎測試
- 步驟3:Redis 數據庫與 Linux 下項目部署
- 第01課 Linux 基礎
- 第02課 Linux 下 JDK 環境搭建及項目部署
- 第03課 Redis 入門
- 階段四 SSM 到 Spring Boot 入門與綜合實戰
- 步驟1:Spring 從入門到進階
- 第01課 Spring 入門
- 第02課 Spring Bean 管理
- 第03課 Spring AOP
- 第04課 基于 AspectJ 的 AOP 開發
- 第05課 JDBC Template
- 第06課 Spring 事務管理
- 第07課 人員管理系統開發
- 第08課 Spring 從入門到進階測試
- 步驟2:Spring MVC 入門與 SSM 整合開發
- 第01課 Spring MVC 入門與數據綁定
- 第02課 Restful 風格的應用
- 第03課 SpringMVC 攔截器
- 第04課 辦公系統核心模塊
- 步驟3:Spring Boot 實戰
- 第01課 Spring Boot 入門
- 第02課 校園商鋪項目準備
- 第03課 校園商鋪店鋪管理
- 第04課 校園商鋪商品管理及前臺展示
- 第05課 校園商鋪框架大換血
- 步驟4:Java 面試
- 第01課 面試準備
- 第02課 基礎面試技巧
- 第03課 Web基礎與數據處理
- 第04課 主流框架