谈谈 JavaScript 中 NaN 的特性,例如 typeof NaN 的结果,以及 NaN == NaN 的结果。

各位老铁,大家好!我是今天的主讲人,咱们今天聊聊 JavaScript 里一个挺有意思的家伙——NaN。别看它名字短小精悍,脾气可是相当古怪,能把不少新手甚至老手都给绕晕。今天咱们就来扒一扒 NaN 的底裤,看看它到底是个什么玩意儿,以及它那些让人哭笑不得的特性。 开场:NaN 是个啥? 首先,咱们得明确一点:NaN 全称是 "Not a Number",意思就是“不是一个数字”。注意,它虽然说自己“不是一个数字”,但它实际上是 JavaScript 里的一个数值类型的值。是不是有点懵?别急,听我慢慢道来。 NaN 通常会在以下几种情况下出现: 数学运算失败: 比如 0/0, Infinity – Infinity, Math.sqrt(-1)(负数开平方根)。 类型转换失败: 尝试将无法转换为数字的字符串转换为数字时,比如 parseInt(“hello”)。 涉及 NaN 的运算: 任何与 NaN 进行的数学运算结果都是 NaN。这个特性很重要,后面我们会详细说。 NaN 的第一个坑:typeof NaN 好了,现在我们知道 NaN “不是一个数字”,但是它又属 …

JS `typeof` `BigInt` 的行为与 `Number` 的区别

咳咳,各位观众老爷们,晚上好!我是今天的主讲人,咱们今儿个唠唠 JavaScript 里 typeof 操作符对待 BigInt 和 Number 这俩兄弟的不同态度。准备好了吗?咱们这就开始! 引子:JavaScript 的数据类型江湖 话说这 JavaScript 江湖啊,数据类型林立,各门各派都有自己的绝活。其中,Number 和 BigInt 算是比较重要的两支流派。Number 掌管着常规的数字运算,精度有限,但用起来方便快捷。而 BigInt 则是一位后起之秀,专门解决超大整数的运算问题,精度那是杠杠的,但用法上稍微有些不同。 那么,typeof 这个行走江湖的“类型侦探”,是如何识别这两位呢? 正题:typeof 的“双标”行为 typeof,顾名思义,就是用来判断一个变量或者表达式的类型的。它的返回值是一个字符串,表示被检测对象的类型。 Number 门派:坦诚相待 对于 Number 类型的变量,typeof 的表现那是相当的坦诚。 let num = 42; console.log(typeof num); // 输出 “number” let floatNum = …

JS `typeof` `null` 为 `object` 的历史原因与兼容性考量

各位听众,早上好!我是你们今天的JavaScript历史八卦分享员。今天咱们来聊聊JavaScript里一个历史遗留问题,也是面试高频考点—— typeof null === ‘object’ 这件事儿。 准备好了吗?咱们这就开始扒历史。 第一幕:JavaScript的草率诞生 话说1995年,Netscape(网景公司,浏览器界的先驱)急需一种脚本语言来增强网页的交互性。Brendan Eich临危受命,在短短10天内设计出了JavaScript的原型(当时的名字叫Mocha)。 是的,你没听错,10天! 这就像让你在10天内设计一套操作系统,然后全世界都要用它。可想而知,很多地方都比较粗糙,甚至可以说是漏洞百出。 typeof null === ‘object’ 就是其中一个。 第二幕:最初的设想与实现 在JavaScript的最初版本中,数据类型在底层是用一个标签(tag)来表示的。这个标签存储了数据的类型信息。 对象(Object)的标签是 0。 null 在最初的设想中,表示的是一个空的对象指针。 由于null被设计成代表“没有对象”,并且底层实现中null的所有二进制位都是 …

JS `typeof` 与 `instanceof` 的底层原理与类型判断的局限性

各位朋友,大家好!今天咱们来聊聊JavaScript里两个常用的类型判断小能手:typeof 和 instanceof。听起来是不是挺简单的?但你要是觉得它们俩“人如其名”,那可就大错特错了!它们背后藏着不少玄机,用不好,可是会掉坑里的。准备好,咱们发车啦! 第一站:typeof 的“真面目” typeof,顾名思义,是用来判断变量类型的。但它判断的,其实是操作数的类型,而不是对象实例的类型。这一点很重要,一定要记住! 简单来说,typeof 会返回一个字符串,告诉你这个变量是啥“底子”。它能识别以下几种基本类型: “undefined”:未定义 “boolean”:布尔值 (true 或 false) “number”:数值 (整数或浮点数) “string”:字符串 “bigint”:BigInt “symbol”:Symbol “object”:对象 (包含 null、数组、对象等) “function”:函数 看,种类还挺多的。咱们来举几个例子: console.log(typeof undefined); // “undefined” console.log(typeof t …

JavaScript 中的类型判断:`typeof`, `instanceof` 与 `Object.prototype.toString`

好的,各位听众老爷们,晚上好!欢迎来到“JavaScript类型判断漫谈”现场,我是今晚的主讲人,人送外号“Bug终结者”。今天咱们不搞那些枯燥乏味的理论,咱们要用段子和案例,把typeof、instanceof 和 Object.prototype.toString 这三个JavaScript界的“老炮儿”给扒个底朝天,看看它们各自的能耐和局限,以及如何在实战中巧妙地运用它们。 首先,咱们先来热热场,讲个笑话: 程序员A:我最近写了个判断类型的函数,贼牛! 程序员B:哦?怎么个牛法? 程序员A:不管什么类型,都能准确判断! 程序员B:那你判断下自己是什么类型的? 程序员A:……(陷入沉思) 这个笑话告诉我们,类型判断这玩意儿,看似简单,实则水很深。搞不好,就把自己给绕进去了。 第一章:typeof:江湖人称“类型速递员”,但经常送错件儿 typeof,顾名思义,就是“类型是啥”的意思。它是一个一元运算符,就像一个快递员,你把一个变量扔给它,它会告诉你这个变量是什么类型的。但是,这个快递员经常送错件儿,尤其是遇到一些特殊情况。 咱们先来看看typeof的正常表现: typeof 123 …