Web前端筆試整理10
阿新 • • 發佈:2020-09-14
下列說法正確的是
- 使用Object.assign(obj1, obj2)可以實現物件的淺拷貝
- for ... in 迴圈只能遍歷物件上的可列舉屬性
- Object。keys( ) 不可以遍歷出物件原型鏈上的屬性
ES5 引入了Object。keys方法, 成員是引數物件自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵名。
for ... in迴圈物件的所有列舉屬性(包括原型上), 然後在使用hasOwenProperty()方法來忽略繼承屬性
嚴格模式
- this不再強制封裝為一個物件, 若沒有指定this的話則是indefined。
- 給一個未宣告的變數賦值會觸發ReferenceError錯誤, 而不再自動宣告為全域性變數
- 給物件的不可寫屬性或只讀屬性賦值, 給不可拓展的物件新屬性賦值, 試圖刪除物件中不可刪除的屬性會丟擲TypeError錯誤, 而不再靜默失敗
- 物件屬性重名, 函式引數重名均為語法錯誤
- 無法使用以0開頭的八進位制表示數字的語法
- 為原始值設定屬性將丟擲TypeError錯誤
- 禁用with語法
- 禁止刪除宣告的變數
- 函式中arguments物件的屬性值與函式引數值不再同步改變
- 增加了一些保留字無法被作為變數名或形參名使用
== 比較
null == undefined 0.1 + 0.2 == 0.3 typeof NaN typeof Function typeof Object typeof {} 'a' + 1 'a' - 1 Function instanceof Object Object instanceof Function
true
false
'number'
'function
'function'
'object'
'a1'
NaN
true
true
0.1 + 0.2 是一個無線接近 0.3的值, 它不等於0.3
在JavaScript中的二進位制的浮點數0.1和0.2並不是十分精確,在他們相加的結果並非正好等於0.3,而是一個比較接近的數字 0.30000000000000004 ,所以條件判斷結果為false
嚴格模式和this指標
'use strict' var name = 'Jay' var person ={ name : 'Wang', pro:{ name:'Michael', getName:function(){ return this.name; } } } console.log(person.pro.getName()); var pepole = person.pro.getName; console.log(pepole());
'Michael'
throw Error
person.pro呼叫了getName(), getName()裡面的this指向了personpro, 所以這裡this.name = ‘Michael’
將person.pro.getName方法賦給了pepole, 然後再全域性執行上下文中呼叫了people() 因為是在嚴格模式下執行, 所以pepole()是指向undefined, undefined又獲取name屬性, 最後導致報錯
嚴格模式不同(再記憶一次)
- 不允許不適用var關鍵字去建立全域性變數, 丟擲ReferenceError
- 不允許對變數使用delete操作符, 拋ReferenceError
- 不可對物件的只讀屬性賦值, 不可對物件的不可配置屬性使用delete操作符, 不可為不可拓展的物件新增屬性, 均拋TypeError
- 物件屬性名必須唯一
- 函式中不可有重名引數
- 在函式中不可有重名引數
- 在函式內部對修改引數不會反應到arguments中
- 淘汰arguments.callee和arguments.caller
- 不可在if內部宣告函式
- 拋棄with語句