写点什么

呵呵,JavaScript 真好玩(苦笑脸)

作者:Geek_4cf903
  • 2022 年 5 月 06 日
  • 本文字数:1214 字

    阅读完需:约 4 分钟

呵呵,JavaScript 真好玩(苦笑脸)

首先,问个问题:在 JavaScript 中,怎样使 x !== x


什么!原来变量自己还可以不全等于自己?!


答:当然咯,NaN


NaN === NaN// false
复制代码



jym:“哈?就这?”

本瓜:“别急,这才刚起步,抓紧坐稳啦!”


有没有可能,这个变量不是 NaN,但是仍然满足 x !== x 呢?


答:当然咯,它可以是任何值!


window.x = 0 // x 设为任何值都可Object.defineProperty(window, 'x', {  get () {    return Math.random()  }})console.log(x)console.log(x !== x)
// 0.6087838197109388// true
复制代码



Amazing!!


我们通过 object. Defineproperty 设置 get 方法,返回一个随机数,即能满足任意值的:x !== x



jym:“还有吗?”

本瓜:“当然啦!”


除了能让 x !== x ,还能让 x === x + 1 ,信不信?


它就是:


const x =  Number.MAX_SAFE_INTEGER + 1x===x+1// true
复制代码


Number.MAX_SAFE_INTEGER 常量表示在 JavaScript 中最大的安全整数(maxinum safe integer)(2^53 - 1)


crazy!!


os:要是把这写在项目代码里,那不得是“唯我独尊”?🐶🐶🐶



jym:“这有用吗?”

本瓜:“当然有用,最大的用处就是知道这么个东西,防止被坑,避免少见多怪。”


除了 x !== xx === x + 1 ,咱还可以让 x > x


const x = {  value: 1,  [ Symbol.toPrimitive ] () {    console.log('x', this.value)    return --this.value  }}
console.log(x > x)// x 1// x 0// true
复制代码


Symbol.toPrimitive 是一个内置的 Symbol 值,它是作为对象的函数值属性存在的,当一个对象转换为对应的原始值时,会调用此函数。


该函数被调用时,会被传递一个字符串参数 hint,表示要转换到的原始值的预期类型。 hint参数的取值是 "number""string"和 "default"中的任意一个。


MDN 示例:


// 一个没有提供 Symbol.toPrimitive 属性的对象,参与运算时的输出结果var obj1 = {};console.log(+obj1);     // NaNconsole.log(`${obj1}`); // "[object Object]"console.log(obj1 + ""); // "[object Object]"
// 接下面声明一个对象,手动赋予了 Symbol.toPrimitive 属性,再来查看输出结果var obj2 = { [Symbol.toPrimitive](hint) { if (hint == "number") { return 10; } if (hint == "string") { return "hello"; } return true; }};console.log(+obj2); // 10 -- hint 参数值是 "number"console.log(`${obj2}`); // "hello" -- hint 参数值是 "string"console.log(obj2 + ""); // "true" -- hint 参数值是 "default"
复制代码


<hr>


哈哈哈,看到这里,jym 不由觉得:呵呵,JavaScript 真好玩(苦笑脸)



嘻嘻嘻,最后再附送一个问题:


在 JavaScript 中,有没有可能使得:typeof x === 'undefined' && x.length > 0 返回 true 呢?


欢迎评论留言~~


<hr>


OK,以上便是本篇分享。

觉得不错点个赞吧👍👍👍,您的鼓励,我的动力,坚持输出质量好文~~ 欢迎评论留言

我是掘金安东尼,输出暴露输入,技术洞见生活。再会吧~~ 👋👋👋

发布于: 刚刚阅读数: 3
用户头像

Geek_4cf903

关注

还未添加个人签名 2020.08.05 加入

还未添加个人简介

评论

发布
暂无评论
呵呵,JavaScript 真好玩(苦笑脸)_Geek_4cf903_InfoQ写作社区