面试官:x !== x 能够为 true ?

2022年05月12日 阅读数:8
这篇文章主要向大家介绍面试官:x !== x 能够为 true ?,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
做者:fatfish
译者:前端小智
来源:medium

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

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及个人系列文章。前端

前言

最近,我被问到几个奇怪的面试问题。它们与普通的问题不一样:这些面试问题看起来很是简单,但却考验你对JavaScript的透彻理解。你能正确回答多少个?java

x !== x 能够为 true ?

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

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

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

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

image.png

(!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,它能够帮助咱们解决这个问题。segmentfault

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

image.png

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('大迁世界')
}

image.png

4. x > x 能够为 true?

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

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('大迁世界')
}

image.png

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

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)

image.png

最后

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


编辑中可能存在的bug无法实时知道,过后为了解决这些bug,花了大量的时间进行log 调试,这边顺便给你们推荐一个好用的BUG监控工具 Fundebug

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

交流

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

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及个人系列文章。