前端面試題精選
原生JS
1.ES6的新特性:
let(****聲明變量)
const(****聲明常量,常量不能修改的量)
var****、let、const的區(qū)別
\1. let和const聲明變量不存在變量提升,如果要使用這個變量,我們需要在變量定義之后使用;
\2. let和const不能重復(fù)聲明變量,如果重復(fù)聲明會報錯;
\3. 用let 和 const 在全局聲明變量不會給window增加屬性;
\4. let和const出現(xiàn)在代碼塊中,會把代碼塊(字面量聲明對象除外)變成塊級作用域,并且出現(xiàn)暫時 性死區(qū) class(****創(chuàng)建類)
import/export(****基于ES6的模塊規(guī)范創(chuàng)建導(dǎo)入/導(dǎo)出模塊(文件/組件))
new set(****數(shù)組去重)
Symbol(****唯一的值) var a = Symbol('qqq')
...ary(****展開運(yùn)算符、剩余運(yùn)算符)
**${}** 模板字符串
解構(gòu)賦值 let {a} = obj; let [b] = ary
for of 循環(huán)
()=>{} 箭頭函數(shù)
箭頭函數(shù)與普通函數(shù)的區(qū)別:
\1. 箭頭函數(shù)是匿名函數(shù),不能作為構(gòu)造函數(shù),不能使用new
\2. 箭頭函數(shù)沒有原型屬性
3.this指向不同,箭頭函數(shù)的this是定義時所在的對象,普通函數(shù)看前面有沒有.,點(diǎn)前面是誰this 就是誰,沒有.就是window
\4. 不可以使用arguments對象,該對象在函數(shù)體內(nèi)不存在。
數(shù)組新增方法:flat、find、findIndex
對象新增方法: Object.assign() Object.values() Object.keys() Object.create()...
2.JS的數(shù)據(jù)類型
基本數(shù)據(jù)類型: number 數(shù)字; boolean 布爾值 :有兩個值 true、false ;string 字符串
null 空對象; undefined 未定義的值(很多瀏覽器的初始值是undefined)
Symbol() 產(chǎn)生一個唯一的值,和誰都不重復(fù)
null和undefined的區(qū)別:
null 是一個表示"無"的對象,轉(zhuǎn)為數(shù)值時為 0
undefined 是一個表示"無"的原始值,轉(zhuǎn)為數(shù)值時為 NaN
當(dāng)聲明的變量還未被初始化時,變量的默認(rèn)值為 undefined
null 用來表示尚未存在的對象,常用來表示函數(shù)企圖返回一個不存在的對象
undefined 表示 “缺少值”,就是此處應(yīng)該有一個值,但是還沒有定義。
典型用法是:
\1. 變量被聲明了,但沒有賦值時,就等于 undefined
\2. 調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于 undefined
\3. 對象沒有賦值的屬性,該屬性的值為 undefined
\4. 函數(shù)沒有返回值時,默認(rèn)返回 undefined
null 表示“沒有對象”,即該處不應(yīng)該有值。
典型用法是:
\1. 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象
\2. 作為對象原型鏈的終點(diǎn)
引用數(shù)據(jù)類型:
對象
.普通對象
.數(shù)組對象
.正則對象(匹配字符串的規(guī)則)
.日期對象
.函數(shù)對象
...
對象的存儲過程:
\1. 開辟一個空間地址
\2. 把鍵值對存儲到這個空間地址的堆內(nèi)存中
\3. 把這個對象指針賦值給變量名
let obj = {
a:1,
fn:(function (val) {
// 賦給fn的是自執(zhí)行函數(shù)的執(zhí)行結(jié)果 也就是一個undefined
// 該自執(zhí)行函數(shù)只會執(zhí)行一次
console.log(val);
})(obj.a)
};
let obj2 = obj;// 兩者代表了同一個地址;
// 獲取屬性的值 obj.fn 或者 obj['fn']
// 新增屬性: obj.c = 100 或者 obj['c'] = 100
// 真刪除 delete obj.a (在嚴(yán)格模式下不支持該方法); 假刪除: obj.a = null;
// 引用類型小習(xí)題
let a = 3;
let b = new Number(3);
let c = 3;
console.log(a == b);
console.log(a === b);
console.log(b === c);
//=========================
const a = {};
const b = { key: "b" };
const c = { key: "c" };
a[b] = 123;
a[c] = 456;
console.log(a[b]);
基本數(shù)據(jù)類型與引用數(shù)據(jù)類型的區(qū)別:
基本數(shù)據(jù)類型是操作值,引用數(shù)據(jù)類型操作的是堆內(nèi)存空間地址
布爾值轉(zhuǎn)換:0 NaN '' null undefined 轉(zhuǎn)化成布爾值是false,其余的都是true
檢驗有效數(shù)字的方法:isNaN
常用的數(shù)據(jù)類型檢測方式: typeof constructor instanceof Object.prototype.toString.call()
比較運(yùn)算符:
== 相對比較:會進(jìn)行默認(rèn)的類型轉(zhuǎn)化; 若轉(zhuǎn)換之后的值相等,則結(jié)果就是true
=== 絕對比較,值不但要相同、類型也得相同。
引用數(shù)據(jù)類型之間的比較,就看是不是同一個地址;
邏輯運(yùn)算符:
|| 表示或者,前邊成立給前邊,前邊不成立給后邊
&& 表示并且前邊成立給后邊,前邊不成立給前邊
本文由博客群發(fā)一文多發(fā)等運(yùn)營工具平臺 OpenWrite 發(fā)布