作者:fatfish
译者:前端小智
起源:medium

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

前言

最近,我被问到几个奇怪的面试问题。它们与一般的问题不同:这些面试问题看起来非常简单,但却考验你对JavaScript的透彻了解。你能正确答复多少个?

x !== x 能够为 true ?

请问当 x 值为什么时,才会打印 大迁世界

const x = ? // ??if (x !== x) {  console.log('大迁世界')}

奇怪,到底有什么值是不等于本身的吗?在 JS 中的确有一个值 NaN,它不等于任何值,甚至不等于本人。

const x = NaN if (x !== x) {  console.log('大迁世界')}console.log(NaN === NaN) // falseconsole.log(x !== x) // trueconsole.log(Number.isNaN(x)) // true

(!isNaN(x) && x !== x) 能够为 true?

当初咱们排除 NaN,那么还有什么值能够不等于它本身的?

const x = ? if(!isNaN(x) && x !== x) {  console.log('hello fatfish')}view rawq2-1.js hosted with 

兴许你晓得 object. Defineproperty,它能够帮忙咱们解决这个问题。

window.x = 0 Object.defineProperty(window, 'x', {  get () {    return Math.random()  }})console.log(x) // 0.12259077808826002console.log(x === x) // falseconsole.log(x !== x) // true

3.如何让 x === x + 1

这个问题可能不容易,但只有你理解 JS,你会晓得 Number.MAX_SAFE_INTEGER,它示意 常量示意在 JavaScript 中最大的平安整数(maxinum safe integer)(2^53 - 1)。

所以,咱们能够把 Number.MAX_SAFE_INTEGER 赋给 x:

const x =  Number.MAX_SAFE_INTEGER + 1 if (x === x + 1) {  console.log('大迁世界')}

4. x > x 能够为 true?

我不想再读了,这是什么垃圾问题?

const x = ? if (x > x) {  console.log('hello fatfish')}

尽管看起来不太可能,一个值怎么可能大于它本人呢?然而,咱们能够应用 Symbol.toPrimitive性能来实现这个问题。

const x = {  value: 1,  [ Symbol.toPrimitive ] () {    console.log('x', this.value)    return --this.value  }}if (x > x) {  console.log('大迁世界')}

真的很神(垃)奇(圾)。

5. typeof x === 'undefined' && x.length > 0

const x = ? if(typeof x === 'undefined' && x.length > 0) {  console.log('大迁世界')}

我不得不抵赖,JS 是一种神奇的语言。除了 undefined 自身,还有什么值能够使 typeof x === undefinedtrue

答案就是 document.all,它示意页面上的所有元素。

const x = document.all if(typeof x === 'undefined' && x.length > 0) {  console.log('大迁世界')}console.log(x)console.log(typeof x)console.log(x === undefined)

最初

你还遇到过什么奇葩的面试题,欢送留言补充!!


编辑中可能存在的bug没法实时晓得,预先为了解决这些bug,花了大量的工夫进行log 调试,这边顺便给大家举荐一个好用的BUG监控工具 Fundebug。

原文:https://javascript.plnenglish...

交换

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。