<meta charset="utf-8">
ECMAScript理解
1. 它是一種由ECMA組織(前身為歐洲計(jì)算機(jī)制造商協(xié)會(huì))制定和發(fā)布的腳本語(yǔ)言規(guī)范
2. 而我們學(xué)的 JavaScript 是ECMA的實(shí)現(xiàn), 但術(shù)語(yǔ)ECMAScript和JavaScript平時(shí)表達(dá)同一個(gè)意思
3. JS包含三個(gè)部分:
1). ECMAScript(核心)
2). 擴(kuò)展==>瀏覽器端
BOM(瀏覽器對(duì)象模型)
DOM(文檔對(duì)象模型)
3). 擴(kuò)展==>服務(wù)器端
- Node
4. ES的幾個(gè)重要版本
ES5 : 09年發(fā)布
-
ES6(ES2015) : 15年發(fā)布, 也稱為ECMA2015
- ES7(ES2016) : 16年發(fā)布, 也稱為ECMA2016 (變化不大)
嚴(yán)格模式
1. 理解:
除了正常運(yùn)行模式(混雜模式),ES5添加了第二種運(yùn)行模式:"嚴(yán)格模式"(strict mode)综液。
顧名思義款慨,這種模式使得Javascript在更嚴(yán)格的語(yǔ)法條件下運(yùn)行
- 目的/作用
消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處谬莹,減少一些怪異行為
消除代碼運(yùn)行的一些不安全之處檩奠,為代碼的安全運(yùn)行保駕護(hù)航
為未來(lái)新版本的Javascript做好鋪墊
3. 使用
在全局或函數(shù)的第一條語(yǔ)句定義為: 'use strict';
如果瀏覽器不支持, 只解析為一條簡(jiǎn)單的語(yǔ)句, 沒(méi)有任何副作用
4. 語(yǔ)法和行為改變
必須用var聲明變量
禁止自定義的函數(shù)中的this指向window
-
創(chuàng)建eval作用域
- 對(duì)象不能有重名的屬性
JSON對(duì)象
1. JSON.stringify(obj/arr)
- js對(duì)象(數(shù)組)轉(zhuǎn)換為json串
2. JSON.parse(json)
- json串轉(zhuǎn)換為js對(duì)象(數(shù)組)
Object擴(kuò)展
ES5給Object擴(kuò)展了一些靜態(tài)方法, 常用的2個(gè):
1. Object.create(prototype, [descriptors])
作用: 以指定對(duì)象為原型創(chuàng)建新的對(duì)象
為新的對(duì)象指定新的屬性, 并對(duì)屬性進(jìn)行描述
value : 指定值
writable : 標(biāo)識(shí)當(dāng)前屬性值是否是可修改的, 默認(rèn)為false
configurable: 標(biāo)識(shí)當(dāng)前屬性是否可以被刪除 默認(rèn)為false
enumerable: 標(biāo)識(shí)當(dāng)前屬性是否能用for in 枚舉 默認(rèn)為false
2. Object.defineProperties(object, descriptors)
作用: 為指定對(duì)象定義擴(kuò)展多個(gè)屬性
get :用來(lái)獲取當(dāng)前屬性值得回調(diào)函數(shù)
-
set :修改當(dāng)前屬性值得觸發(fā)的回調(diào)函數(shù),并且實(shí)參即為修改后的值
- 存取器屬性:setter,getter一個(gè)用來(lái)存值附帽,一個(gè)用來(lái)取值
<script type="text/javascript">
var obj = {username:'jordan',age:55};
var obj1 = {};
obj1 = Object.create(obj,{
sex:{ value:'男', writable:true,//標(biāo)識(shí)當(dāng)前屬性值可修改的 configurable:true,//標(biāo)識(shí)當(dāng)前屬性可以被刪除 enumerable:true,//標(biāo)識(shí)當(dāng)前屬性能用for in 枚舉 }
});
// console.log(obj1);
console.log(obj1.sex);//男
obj1.sex = '女';
console.log(obj1.sex);
for(var i in obj1){
console.log(i);
}
var obj2 = {firstName:'kode',lastName:'bryant'};
Object.defineProperties(obj2,{
fullName:{ get:function () {//獲取擴(kuò)展屬性的值 console.log('get()'); return this.firstName + " " + this.lastName; }, set:function (data) {//存儲(chǔ)擴(kuò)展屬性的值 console.log('set()',data); var names = data.split(' '); this.firstName = names[0]; this.lastName = names[1]; }
}
});
// console.log(obj2);
console.log(obj2.fullName);
obj2.fullName = 'tim duncan';
console.log(obj2.fullName);
var obj3 = {
firstName:'stepthen', lastName:'curry', get fullName(){ return this.firstName+""+this.lastName; }, set fullName(data){ var names = data.split(' '); this.firstName = names[0]; this.lastName = names[1]; }
};
console.log(obj3);
obj3.fullName = 'kode bryant';
console.log(obj3.fullName);
</script>
<script type='text/javascript'>
</script>