JS面試經(jīng)典知識(一)

前端面試題精選

原生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ā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容