JS里面具有對象的概念,但是沒有類的概念。原型對象。
- 面向?qū)ο螅?OOP
class 人類{}
張三 = new 人類();
1. 對象的概念
JS一切皆對象。number ,string ,DOM,BOM,array全部都是對象
字面量:一看就知道是啥。
2.申明方式
第一種: {};空的對象
第二種: new Object();
3.對象的鍵
對象內(nèi)容時由鍵值對組成的。前面的名字就是對象的鍵,后面值就是對象鍵的值。
鍵值對是成對出現(xiàn)的,不能單獨存在。
對象的鍵都是字符串,所以前面鍵名在定義的時候不需要添加引號,而對象的值可以是任何數(shù)據(jù)類型,所以對象的值如果是字符串,那么需要添加引號。
4.對象的鍵的字符串特性
如果鍵是數(shù)字格式的,那么先轉(zhuǎn)化成標準數(shù)字,在轉(zhuǎn)化成字符串。
5.特殊的鍵名
以數(shù)字開頭的,但是里面包含有字母的鍵名就是特殊的鍵名。
不符合標識符命名規(guī)范的鍵名就是不標準鍵名。
具有特殊鍵名的需要給鍵名添加引號。而且訪問的時候只能使用中括號的形式訪問。
6.屬性與方法的概念
對象中鍵就叫做對象的屬性。鍵的值叫做屬性值。
如果一個對象的屬性的值是一個函數(shù)。那么我們稱這樣的屬性叫做方法。
屬性值是函數(shù)屬性的叫做對象方法。
屬性值不是函數(shù)的屬性叫做對象屬性。
7.對象的動態(tài)屬性。
一個對象在申明的時候,不一定會申明所有的屬性,有些屬性是可以后來添加的,這種能夠給對象添加屬性的方法叫做對象的動態(tài)屬性。
var p1{
name:"zhansgan",
age : 18
};
var p2={};
p2.name = 'lisi';
p2.age = '18';
8.對象的格式
對象的字面量就是一對大括號。
里面是成對 的鍵值對,也就是屬性。
每一個鍵值對之間使用一個逗號隔開。最后一個可以不加逗號。
9.表達式?還是對象?
{
foo:'bar'
}
在JS V8 引擎規(guī)定,這樣的語法統(tǒng)一認為是一個對象。
10.對象的引用
對象的傳遞和普通數(shù)據(jù)類型的傳遞是不一樣的。
值傳遞與地址傳遞。
簡單數(shù)據(jù)類型的傳遞使用的是值傳遞。
對象數(shù)據(jù)類型的傳遞使用的是地址傳遞。
對象的別名一旦數(shù)據(jù)類型發(fā)生變化,那么與原來對象之間地址引用就發(fā)生了改變。
11.對象的屬性
屬性的獲?。簝煞N方式
1. 對象名.屬性名
2. 對象名['屬性名']
所有使用點操作的方式都是可以替換成中括號形式的。
特殊情況:
如果屬性名是數(shù)字,那么只能使用中括號方式。
如果屬性是一個變量的情況也只能使用中括號,只是不加引號。
屬性的賦值:
1. 對象.屬性名 = 值;
2. 對象['屬性名'] = 值;
oDiv.innerHTML
對象的屬性可以使用delete刪除。
刪除成功返回true。刪除不存在的屬性也是返回true,所以不能使用delete的返回值判斷一個屬性是否被刪除。
12.對象的遍歷
in 操作符 : 可以判斷某一個對象是否具有某個屬性。
for....in : 遍歷對象
13.with
with(p3.lala.child){
console.log(o3)
console.log(o2)
o4 = 'das';
}
但是不推介使用。推介使用臨時變量代替一長串對象操作。
14.嚴格模式
使用:”use strict”
1. 腳本開始的位置(不利于JS文件的合并)
2. 函數(shù)開始的位置
3. 腳本改良版,使用立即函數(shù)包含
產(chǎn)生的影響:
1. 禁用with語法
2. 變量必須申明
3. eval的作用域,并且eval與arguments作為關鍵字
4. 全局函數(shù)this指向undefined
5. 對象字面量重復屬性名報錯
6. 禁止使用8進制
15.代碼規(guī)范
縮進:一個tab 或者四個空格。
區(qū)塊括號:
if(){
}
圓括號
函數(shù)調(diào)用,函數(shù)申明沒有空格
func();
分號: 每一代碼結(jié)束的時候要加上分號。
function say(){
}
var say = function(){
};
(function(){
})();
全局變量:一般要避免使用全局變量,因為會產(chǎn)生污染。
可以使用立即函數(shù)避免全局變量。避免不了使用全局變量,那么請使用大寫。var USER_NAME
盡量使用嚴格相等。
不用不申明變量直接使用。