js:语言精髓笔记12--动态语言特性(2)
生活随笔
收集整理的這篇文章主要介紹了
js:语言精髓笔记12--动态语言特性(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于括號內:
- 通過賦值時發生的重寫:
- 語法聲明階段的重寫: //會報錯,一般引擎不承認在表達式中聲明的標識符;
重寫:
- 對內部對象系統的影響:
- 重寫內置構造器:任意構造器的原型屬性不受內置構造器重寫的影響,它總是創建自一個系統引擎中的構造器;
- 重寫內置構造器的原型:會影響內部對象系統;
- 對象類型的直接量聲明,與它的構造類直接綁定;
- 對象成員的重寫:
- 重寫檢測:hasOwnProperty,檢查是否重寫了繼承屬性,注意前提是維護有效的原型鏈;
- 重寫刪除:
- delete obj1.name //刪除自有的;
- delete obj1.constructor.prototype.name //刪除繼承的;
- //刪除obj原型鏈中最近的那個prop屬性;
function deleteProperty(obj, prop) {if (prop in obj) {do {if (obj.hasOwnProperty(prop)) break;}while (obj.constructor && (obj = obj.constructor.prototype));}delete obj[prop]; }
- 宿主對重寫的限制:
- 涉及維護引用;
- 涉及觸發行為;
- 引擎對重寫的限制:
- this不能被重寫;
包裝類:
- JS中存在兩套類型系統:元類型系統和對象類型系統;為了實現一切都是對象,JS將元類型數據(boolean,number,string)通過包裝類編程對象數據來處理;
- 包裝:
- 顯示包裝:
- 隱式包裝:
- 元數據如果是用普通求值運算或復制運算,則是以非對象的形式;
- 元對象的隱式包裝總是發生在成員存取運算符中;
JS統一語言范型的基本模型:
- 一切都是對象: aFunc instanceof Object == true;
- 對象由函數構造: aObj = new aFunc();
?關聯數組:
- 分類:索引數組、關聯數組;
- 關聯數組是實現對象系統的基礎,JS中對象(的原型)所持有的屬性表,就是一個關聯數組的內存表達式:
- 屬性存取,就是查表;
- 對象實例,就是一個可以動態添加元素的關聯數組;
- 原型繼承,就是在繼承鏈的關聯數組中查找元素;
值運算:
- 隱式轉換:
- 運算導致://通常語法分析期,JS引擎首先解析運算符,并將其操作的運算元(標識符或直接量)置入語法樹,但這一過程并不對運算元做類型推定;在執行期,引擎執行語法樹運算,先根據元算符所支持的元算元類型進行一次操作數的隱式轉換;
- 語義導致: //一些語句在語義分析時也會做一些強制轉換操作; //if,while等;
- 值類型之間的轉換:
- undefined: ?//任何其它類型都不會轉換為undefined
- 'undefined';
- NaN;
- false;
- number: ? //任何值都會轉換到number,至少是NaN;
- undefined: ?//任何其它類型都不會轉換為undefined
?
?
轉載于:https://www.cnblogs.com/jinkspeng/p/4094288.html
總結
以上是生活随笔為你收集整理的js:语言精髓笔记12--动态语言特性(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断Python输入是否为数字
- 下一篇: 【持续更新】设计技巧++