有意思的前端面試題

這幾天逛掘金,發(fā)現(xiàn)一些有意思的面試題,收集給大家分享一下
一. js基礎(chǔ)題

let a = {a: 10};
let b = {b: 10};
let obj = {
  a: 10
};
obj[b] = 20;
console.log(obj[a]);

如果不運行代碼,請思考一下結(jié)果是啥?
簡書暫時不支持折疊功能,所以直接看一下結(jié)果吧

console.log(obj[a]);//20
  • 解析
    考的知識點-
    1.Objectkey為字符串
    2.obj[a]obj[b]中的a b為變量
obj[b] = 20;
console.log(obj)//{a:10,[object Object]: 20}

此時obj[a]獲取的是obj['object Object']的值,也就是20
二. 隱式轉(zhuǎn)換a==1&&a==2&&a==3
上題的解法有幾種,下面只說一種,而且是不被推薦的一種,但是涉及到js基礎(chǔ),咱們就來看一看

  • 先說答案
a={
  i: 1,
 valueOf(){
   return this.i++
 }
}
  • 解析
  1. ==兩邊的數(shù)據(jù)格式不一樣,涉及隱式轉(zhuǎn)換
a = {
  i: 1,
  toString(){
    console.log('tostring')
  }
}
a==1//tostring
a = {
  i: 1,
  valueOf(){
    console.log('valueOf')
  }
}
a==1//valueOf
a = {
  i: 1,
  valueOf(){
    console.log('valueOf')
  },
 toString(){
    console.log('tostring')
  }
}
a==1//valueOf
  1. object隱式轉(zhuǎn)換首先調(diào)用valueOf方法,如果無此方法,就調(diào)用toString方法;這里指的是object實例的本身方法,而不是原型鏈上的方法,如果實例本身既無valueOf也無toString,那么調(diào)用的就是原型鏈上的方法,所以寫成如下方法也是可以的
a={
  i: 1,
 toString(){
   return this.i++
 }
}

三. 請寫出下面的輸出結(jié)果

var a = {
  name:'lv',
  print(){
    return ()=>{
      console.log(this.name)
    }
  }
}
var b = {
  name:'yong'
}
a.print()()
a.print().call(b)
a.print.call(b)()

答案如下

"lv"
"lv"
"yong"

解析如下:

  • 第一個控制臺輸出很好理解避消,正常執(zhí)行函數(shù)
  • 第二個和第三個涉及了call知識點和es6箭頭函數(shù)
    1.call方法會改變函數(shù)(不包括箭頭函數(shù))里this指向并執(zhí)行函數(shù)
    2.箭頭函數(shù)的this指向是固定的聚谁,不會受call方法影響,箭頭函數(shù)this永遠(yuǎn)指向箭頭函數(shù)所在對象的this,
    簡單說就是,該thisprint函數(shù)的this.所以第二個代碼輸出'lv',第三行代碼執(zhí)行時改變了print函數(shù)this,所以輸出結(jié)果為'yong'

四. 請看題

const a = { 1:'a',2:'b',3:'c'}
const set = new Set([1,2,3,4,'5'])
console.log(a.hasOwnProperty('1'))
console.log(a.hasOwnProperty(1))
console.log(set.has('1'))
console.log(set.has(1))
console.log(set.has('5'))
console.log(set.has(5))

答案如下

true
true
false
true
true
false
  • 解析
    Objectkey為字符串,數(shù)字會轉(zhuǎn)換成字符串
    hasOwnProperty接收的參數(shù)為字符串迄委,數(shù)字會轉(zhuǎn)化為字符串
    set結(jié)構(gòu)-鍵值可以是任意格式房匆,所以會區(qū)分出字符串和數(shù)字

五.請寫出下面題目的打印值-關(guān)于this指向

let length = 10 
function fn() {
  console.log(this.length)
}
let obj = {
  length: 5,
  method(fn){
    fn()
    arguments[0]()
  }
}
obj.method(fn,1)

考點:

  • 全局下聲明變量letvar的區(qū)別-var的變量會掛在window上窝革;let不會
  • this的引用對象永遠(yuǎn)是call的第一個參數(shù)姻蚓,沒有指定call的第一個參數(shù)(這里包括隱式指定)時為undefined,非嚴(yán)格模式下會被js指向window
  • window.length返回當(dāng)前窗口中包含的框架數(shù)量(框架包括frame和iframe兩種元素).
  • arguments[0]()等價于arguments.0.call(arguments)等價于fn.call(arguments)
    若是運行結(jié)果還是不懂,可以留言堆生,我看到后會答復(fù)
    每個運行環(huán)境下的第一個結(jié)果不太一樣专缠,這里只展示我的結(jié)果
0
2

五. 不使用加減乘除計算一個整數(shù)的8倍
這個題目通用解法就是使用二進(jìn)制位運算符

function scaleNum(num,multiple){
  let i = multiple/2
  return num<<i
}
let a = scaleNum(5,4)
console.log(a)//20

這個代碼只限于2的倍數(shù)計算,如果是其他倍數(shù)還需要用其他的位運算符做一下減法

  • 下面獻(xiàn)上我剛看到題目時想到的CSS方法,這個方法不建議面試時用淑仆,因為別人好像沒這么寫的(騷操作)
function scaleNum(num,multiple){
  let a = document.createElement('div')
  a.style.width=`${num}px`
  a.style.transform = `scale(${multiple})`
  a.id='lllccc'
  document.body.appendChild(a)
  let result = a.getBoundingClientRect().width
  document.body.removeChild(a)
  return result 
}
let a = scaleNum(5,10)
console.log(a)//50
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涝婉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蔗怠,更是在濱河造成了極大的恐慌墩弯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寞射,死亡現(xiàn)場離奇詭異渔工,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兄渺,“玉大人,你說我怎么就攤上這事旺韭。” “怎么了掏觉?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵区端,是天一觀的道長。 經(jīng)常有香客問我澳腹,道長织盼,這世上最難降的妖魔是什么杨何? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮悔政,結(jié)果婚禮上晚吞,老公的妹妹穿的比我還像新娘延旧。我一直安慰自己谋国,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布迁沫。 她就那樣靜靜地躺著芦瘾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪集畅。 梳的紋絲不亂的頭發(fā)上近弟,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音挺智,去河邊找鬼祷愉。 笑死,一個胖子當(dāng)著我的面吹牛赦颇,可吹牛的內(nèi)容都是我干的二鳄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媒怯,長吁一口氣:“原來是場噩夢啊……” “哼订讼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扇苞,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤欺殿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳖敷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脖苏,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年定踱,在試婚紗的時候發(fā)現(xiàn)自己被綠了帆阳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屋吨,死狀恐怖蜒谤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情至扰,我是刑警寧澤鳍徽,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站敢课,受9級特大地震影響阶祭,放射性物質(zhì)發(fā)生泄漏绷杜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一濒募、第九天 我趴在偏房一處隱蔽的房頂上張望鞭盟。 院中可真熱鬧,春花似錦瑰剃、人聲如沸齿诉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粤剧。三九已至,卻和暖如春挥唠,著一層夾襖步出監(jiān)牢的瞬間抵恋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工宝磨, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留弧关,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓唤锉,卻偏偏與公主長得像世囊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腌紧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,097評論 1 32
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化茸习,入門級到專家級,廣度和深度都會有所增加壁肋。 題目類型: 理論知...
    怡寶丶閱讀 2,580評論 0 7
  • 1.OC里用到集合類是什么号胚? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,374評論 0 3
  • 1個理念 培養(yǎng)一群善于解決問題的人浸遗,而不是自己去解決所有問題猫胁! 4個原則 1)員工的方法可以解決問題,哪怕是很笨的...
    瘋筆老楊閱讀 439評論 0 0
  • 2018年5月27日 星期日 天氣晴 今天是周日跛锌,也是我們回娘家的日子弃秆,吃過早飯把孩子送去學(xué)素描,我們就去...
    秋日私語666閱讀 98評論 0 0