国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

那些陌生又熟悉的前端面試題

開發 前端
過完年需要跳槽的小伙伴還是挺多的,又要開始刷前端面試題了!會不會有一種錯覺,看著這道面試題很熟,但是不知道該如何做?

過完年需要跳槽的小伙伴還是挺多的,又要開始刷前端面試題了!會不會有一種錯覺,看著這道面試題很熟,但是不知道該如何做?或者有答案又不知道是否正確?或者使用編輯器可以運行出來正確的答案,但是不知道怎么得來的,這些你都中招了嗎?

1、嚴格模式與非嚴格模式的區別,你了解多少?

JavaScript 語言是一門弱類型語言,存在許多類型錯誤,因此 ES6 引入了嚴格模式概念。

如果不加 ‘use strict’ 常規模式下就是屬于非嚴格模式。

嚴格模式

在 js 文件頂部添加 ‘use strict’ 就屬于嚴格模式,嚴格模式也可以指定在函數內部。

<script>
'use strict'
//或者函數內部
(function(){
'use strict'
})()
</script>

嚴格模式,是為 js 定義來了一種不同的解析與執行模型,在嚴格模式下,ECMAScipt 3 中一些不解和不確定的行為將得到處理,而且會對不安全的操作會拋出異常。‘use strict’ 會告訴瀏覽器引擎可以切換到嚴格模式執行。

嚴格模式與非嚴格模式區別

2、深淺拷貝的區別有哪些?

常見筆試題:

var person = {
name:"前端人",
hobby:['學習','敲代碼','潛水']
}
function copy(source){
var newObj = new Object()
for(var i in source){
if(source.hasOwnProperty(i)){
newObj[i] = source[i]
}
}
return newObj
}
var p1 = copy(person);
p1.name = "Web Person"
console.log(person.name)
console.log(p1.name)
p1.hobby = ["內卷"]
console.info(person.hobby)
console.info(p1.hobby)
/*運行結果:
前端人
Web Person
["學習", "敲代碼", "潛水"]
["內卷"]
*/

試試這道筆試題你會做嗎?

要說 js 的深淺拷貝,就不得不提 js 的兩大數據類型:基本數據類型和引用類型。

基本數據類型的變量名和值都存儲在棧中,對于引用類型的變量名存儲在棧中,而值存儲在堆中。由于存儲方式不同,所以導致了他們復制的時候方式不同。

賦值

基本數據類型賦值的時候,創建的基本數據類型會在內存中開辟一個新空間把值復制過來,而引用類型采用的是地址存儲,如果直接把一個引用數據直接賦值給另外一個數據,就相當于直接把自己存儲值的地址給了另外一個變量,所以改變一個的值,也會改變另外一個的值。

var a = 1;
var b = a;
b=2;
console.log(a) //1
console.log(b)//2
var p1 = {name:"前端人"}
var p2 = p1
p2.name = "打工仔"
console.log(p1.name) // '打工仔'
console.log(p2.name) // '打工仔'

深淺拷貝是如何定義的?

假設有 p 和 copyP 兩個變量,如果copyP 是拷貝了 p 的,我們通過修改 copyP 來觀察 p 是否發生改變,如果跟著改變,就是淺拷貝,如果是不改變,就說明是深拷貝。

基本類型復制的時候會開辟新的內存空間,所以兩個值是相互獨立的,引用類型復制的時候就要看是復制的內存地址還是復制一個新的堆。所以深拷貝主要針對的是引用類型的數據。

淺拷貝的常見的方式:

1、直接賦值

var arr1 = [1,2,3,4];
var arr2 = arr1;

2、Object.assign

var obj = {
a:1,
b:2
}
var o = Object.assign(obj)

深拷貝的常見方式:

引用數據類型最常用的就是 Object 和 Array ,引用數據內部的數據也可以是多樣化的,進行深拷貝時,也要適當地根據數據結構進行合適的復制方式,具體的深拷貝方法分別有:

1、數組中只包含基本數據類型

  • 循環數組,將數組的值復制出來放入另一個新數組中
  • 利用 slice 方法
  • 借助 concat 方法
  • 利用 from 方法
  • 使用擴展符 ...

2、對象中只包含基本數據類型

  • 利用 for in 循環,將對象的值拿出來
  • 使用 Object 復制給一個新的空對象
  • 使用 ... 擴展運算符
  • 手動復制,將屬性值一個一個單獨復制

3、對象或數組里含有一層或多層引用數據類型時

  • 使用 jQuery 的 extend 方法
  • JSON.parse(JSON.stringify())
  • 使用遞歸自己寫一個深拷貝的方法

深淺拷貝的常見應用主要是數據的增刪改操作。

3、this 的指向

大廠筆試題:

var name = 'window name'
var p1 = {
name:'p1 name',
showName:function(){
console.info(this.name)
}
}
var fn = p1.showName
fn()
p1.showName()
var p2 = {
name:'p2 name',
showName:function(fun){
fun()
}
}
p2.showName(p1.showName)
p2.showName = p1.showName
p2.showName()
/*
運行結果:
window name
p1 name
window name
p2 name
*/

這是一道關于 this 指向的面試題,接下來我們就說說 this 是如何指向的?

this 對象是運行時基于函數的執行環境綁定的:

  • 在全局函數中,this 等于 window 。
  • 函數上下文調用,嚴格模式下 this 為 undefined ,非嚴格模式下,this 指向 window 。
  • 當函數被作為某個對象的方法被調用時,this 等于那個對象。如果使用 call apply 改變當前 this 時,將會指向為傳遞過來的那個 this 。
  • 匿名函數的執行環境具有全局性,因此 this 指向 window。
  • 構造函數內的 this 指向創建的實例對象。
  • dom 事件處理函數,this 指向觸發該事件的元素。
  • setTimeout 和 setInterval 中的 this 指向全局變量 window

看完上述 this 指向解釋,你就可以做上邊的那道面試題了。

如何改變 this 的指向?

call 、bind 和 apply 這三個函數都是用來改變 this 指向的,就是改變函數執行時的上下文。

修改上述面試題:

var name = 'window name'
var p1 = {
name:'p1 name',
showName:function(){
console.info(this.name) // p2 name
}
}
var p2 = {
name:'p2 name',
}
p1.showName.call(p2)
p1.showName.apply(p2)
var bind = p1.showName.bind(p2)
bind()

call 、bind 和 apply 改變 this 指向,最大作用就是實現代碼復用。

至于 call、bind 和 apply 的區別,可以自行去了解下。

4、隱式轉化

console.log( '2'>10 ) //false
console.log( '2'>'10' ) //true
console.log( 'abc'>'b' ) //false
console.log( 'abc'>'aab' ) //true
console.log( undefined == null ) //true
console.log( NaN == NaN )//false
console.log( [] == 0 ) //true
console.log( ![] == 0 ) //true
console.log( [] == [] ) //false
console.log( {} == {} ) //false
console.log( {} == !{} ) //false

對象的類型轉換表

有了上邊那個表,事情就變得簡單了!

關系運算符進行運算時,不同類型的值會自動轉化為相同類型值,然后進行

1、兩邊有一個是字符串一個是是數字時,字符串調用 Number 方法,將字符串轉為數字,所以:

console.log( '2'>10 )  => console.log( 2>10 ) 

2、如果兩邊都是字符串時,按照字符串的 unicode 編碼來轉換的,所以:

'2'.charCodeAt() = 50
'10'.charCodeAt() = 49
console.log( '2'>'10' ) => console.log( 50 >49 )

3、字符串進項比較時,先比較第一位,如果不相等直接得出結果,如果第一項相等,會繼續使用第二項進行比較。

console.log( 'abc'>'b' ) // a < b 所以為 false
console.log( 'abc'>'aab' ) // a=a 第二位 b>a 所以為 true

4、轉為布爾值都為 false 的類型分別有:undefined 、null 、0、NaN、false、‘’

console.log( undefined == null ) //true

5、NaN表示的是非數字,但是這個非數字也是不同的,因此 NaN 不等于 NaN,兩個NaN永遠不可能相等。

console.log( NaN == NaN )//false

6、關系運算有一個數值,將另外一個值也轉為 number 類型。

Number([].valueOf().toString()) = 0
console.log( [] == 0 ) => console.log( 0 == 0 ) //true

7、有邏輯運算的,將其他數據類型轉為 boolean 值。

Boolean([]) = true => 取反 true
console.log( ![] == 0 ) => console.log( false == false ) //true

8、直接使用兩個空數組比較,數組地址不同,所以不相等。

console.log( [] == [] ) //false
// 對象地址不一樣
console.log( {} == {} ) //false
{}.valueOf().toString() ="[object Object]"
console.log( {} ==
責任編輯:姜華 來源: 今日頭條
相關推薦

2021-07-26 06:57:58

系統CSS Content

2022-07-27 08:27:34

Call前端

2022-03-27 20:37:42

系統抽象語言

2023-05-19 08:21:40

MarginCSS

2019-02-21 14:12:26

前端面試題Vue

2021-02-02 06:12:39

JavaScript 前端面試題

2023-08-27 15:57:28

前端開發

2022-07-08 08:21:26

JSbind 方法

2022-01-18 08:16:52

Web 前端JavaScript

2024-03-15 08:18:25

volatileAtomic關鍵字

2018-03-08 18:40:47

Java百度面試題

2017-09-06 09:13:24

2023-12-12 07:40:52

JavaScript面試題前端

2019-07-19 15:21:00

SQL編程語言NOSQL

2015-07-23 14:13:43

前端開發面試題

2021-03-15 09:53:37

計算機網絡面試題

2020-11-06 09:05:18

前端web開發

2023-04-27 09:08:19

JavaScript隱式類型轉換

2018-03-07 09:42:07

2022-09-05 17:49:53

Java線程池
點贊
收藏

51CTO技術棧公眾號

麻豆91蜜桃| 欧美高清在线观看| 一本一本久久a久久精品综合小说| 国产自产在线视频| 日韩视频免费看| 五月天欧美精品| 国产麻豆一区二区三区在线观看| gogogo高清在线观看一区二区| 欧美一区二区三区成人久久片| 国产精品成人**免费视频| 日韩亚洲欧美成人一区| 免费网站成人| 欧美日韩精品二区第二页| 成年人免费在线视频| 欧美熟乱第一页| 999热视频| 欧美福利视频| 超碰97人人人人人蜜桃| 国产精品扒开腿做爽爽爽软件| 国产日韩欧美电影在线观看| 91成人精品视频| 成人av资源| 久久精品系列| 亚洲性生活视频| 电影一区二区| 欧美丰满少妇xxxxx| 亚洲国产国产| 91久久久一线二线三线品牌| 欧美18av| 亚洲精品第一国产综合野| 免费羞羞视频网站| 亚洲国产一区二区三区青草影视| 日韩欧美在线观看强乱免费| 捆绑调教美女网站视频一区| 日韩av成人在线观看| 久久中文亚洲字幕| 欧美精品免费观看二区| 夫妻av一区二区| 黄页在线观看| 欧美色涩在线第一页| 韩日毛片在线观看| 欧美日本中文字幕| 欧美激情成人| 欧美日韩在线精品一区二区三区| 国产电影精品久久禁18| 免费一区二区三区在线观看| 久久国产尿小便嘘嘘| 国产曰肥老太婆无遮挡| 欧美国产日产图区| 黄色在线视频观看网站| 欧美大胆人体bbbb| 亚洲一区二区三区四区电影 | 亚洲一区二区三区中文字幕在线观看| 91精品国产高清久久久久久| 亚洲大全视频| 国产又粗又大又爽的视频| 成人免费一区二区三区在线观看| 夜夜爽99久久国产综合精品女不卡 | 艹b视频在线观看| 欧美性高潮在线| 丝袜美腿一区| 国产精品视频网| 国产真实乱对白精彩久久| 色综合天天色综合| 91精品在线免费观看| 亚洲精品一区二区三区中文字幕| 7777精品久久久大香线蕉小说| 成人av网址在线| 日本一区视频| 亚洲女人****多毛耸耸8| 麻豆av在线导航| 国模视频一区二区三区| 国产日本久久| 亚洲人成亚洲人成在线观看| 日韩mv欧美mv国产网站| 日韩欧美亚洲v片| 亚洲乱码日产精品bd| bl视频在线免费观看| 欧美亚洲综合在线| 日韩高清在线观看一区二区| 精品久久久久久中文字幕动漫| 久久九九久精品国产免费直播| 999久久欧美人妻一区二区| 亚洲一区二区影院| 成人在线免费av| 深夜福利亚洲导航| 欧美视频四区| 3d黄动漫网站| 中文字幕免费精品一区| 999av小视频在线| 琪琪亚洲精品午夜在线| 国产精品影视网| 精品国产白色丝袜高跟鞋| 97精品在线视频| 丁香天五香天堂综合| 操你啦视频在线| 国产在线999| 亚洲国产精品av| 成人在线爆射| 亚洲国产高清国产精品| 欧美性猛交xxxxxxxx| 精品99在线| 一区二区三区韩国| 中文字幕国产亚洲| 久久精品国产精品亚洲红杏| 黄色在线播放网站| 国产91精品一区二区绿帽| 国产日本精品| 一级毛片免费视频| 欧美片一区二区三区| 国产69精品久久久久毛片| 欧美xxx黑人xxx水蜜桃| 久精品国产欧美| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美日韩中字| 天堂中文字幕一二区| 7777免费精品视频| 综合色天天鬼久久鬼色| 黄色网一区二区| 亚洲aaa激情| 一区二区国产视频| 图片婷婷一区| 黄网址在线播放免费| 欧美二区三区91| 欧美激情第10页| 色视频在线观看| 91精品网站| 欧美日本乱大交xxxxx| 一本色道久久综合| av香蕉成人| 尤物国产精品| 亚洲天堂av在线播放| 国产成人av一区二区三区在线观看| 忘忧草在线日韩www影院| 91禁国产网站| 中文字幕成人网| 日韩欧美国产大片| 曰本人一级毛片免费完整视频| 国产精品2018| 日韩欧美在线免费| 亚洲综合另类| 性生交免费视频| 欧美激情亚洲自拍| 国产精品对白交换视频| 成人在线免费观看91| 成人在线观看黄色| 中文字幕中文字幕在线中一区高清| 日韩精品在线影院| 91嫩草亚洲精品| 欧美精品a∨在线观看不卡| 成人动漫视频在线观看免费| 欧美日韩精品福利| 国产一区二区调教| 麻豆一二三区精品蜜桃| 全部孕妇毛片丰满孕妇孕交| 97免费资源站| 亚洲精品黄网在线观看| thepron国产精品| 少妇一区二区三区| 色天天综合狠狠色| 成人四虎影院| eeuss鲁片一区| 国产精品视频一区二区三区经| 波波电影院一区二区三区| 狠狠久久伊人中文字幕| www.com黄色片| 亚洲自拍小视频| 亚洲精品久久久久国产| 欧美高清一级片在线观看| 综合激情一区| 8x8x最新地址| 国产乱肥老妇国产一区二| 7777女厕盗摄久久久| av在线这里只有精品| 日韩理论在线| 视色视频在线观看| 国产精品视频资源| 精品久久人人做人人爽| 国产精品乱子久久久久| 国产偷自视频区视频一区二区| 亚州精品国产| 深夜福利在线看| 轻点好疼好大好爽视频| 国产在线一区二区三区| 亚洲桃花岛网站| 欧美日韩在线影院| 成人深夜视频在线观看| 国产精品精品| 成人黄色毛片| 高清av电影在线观看| 国产高清精品在线观看| 国产精品区一区二区三在线播放| 久久韩国免费视频| 蜜臀va亚洲va欧美va天堂 | 日韩一区二区免费电影| 久久这里只有精品视频网| 欧美一区二区三区另类| 精品国产乱码久久久久久樱花| 日本三级视频在线观看| qvod激情图片|