iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js为什么[]==![]是成立的吗
  • 158
分享到

js为什么[]==![]是成立的吗

js[]==![] 2023-01-31 15:01:39 158人浏览 泡泡鱼
摘要

目录前言== 与 === 的区别强制类型转换练习特殊情况undefined==null尾言前言 js是一门弱类型的语言,它的强制类型转换的迷惑性也被人诟病,例如标题提到的一个小例子,

前言

js是一门弱类型的语言,它的强制类型转换的迷惑性也被人诟病,例如标题提到的一个小例子,我想可能很难再找到其他的语言,允许我们觉到一个值似乎既为真也为假。

其实现在规范更推荐js开发者们避免使用 == 这种会产生强制类型转换的语法,大家尽可能会用 === 来代替,我在工作中也确实如此。

这里涉及到强制类型转换的问题,由于js的类型设计如此,它并不是难用,而是容易出现让人难以理解的内容,所以被很多人诟病。其实遇到任何问题,第一时间不应该是回避,而是应该试着去了解它,理解了也就不会迷惑了。

我想你也想解除一下自己的迷惑吧?本文就来给介绍一下关于==的类型转换问题。

== 与 === 的区别

这时候,如果你有经验,你肯定会说:这个我知道,== 只判断值,=== 会同时判断值和类型

这么理解也许可以,但是严格来说,这句话不够准确,真正的区别应该是:== 在比较两个不同类型的值时会发生强制类型转换,而 === 不会

强制类型转换

然后怎么转换呢?记一下以下几点就完了。

前置条件是两者类型不同,

  1. 两者如果是表达式,先计算表达式。
  2. 两者中有一个是对象类型,则该对象类型执行ToPrimitive后再进行比较。
  3. 两者都是基本类型,判断类型是否相同,不同,则同时执行ToNumber后再比较。
  4. 特殊情况,null == underfined,两者在 == 比较中只与对方和自己本身相等。

ToPimitive:执行该对象的valueOf函数,如果结果为基本类型则直接返回,否则返回该对象的toString函数的执行结果。

ToNumber:转化为数字类型。

例子

ok,知道了以上的内容,我们来看看[]==![]发生了什么。

[] == ![] // 右边是表达式,先进行计算,[]的boolean值为true,所以![]则为false

// ⬇⬇⬇

[] == false // 右边是基本类型,左边则是数组(对象类型),因此对左侧执行ToPrimitive

// ⬇⬇⬇

// ToPrimitive执行过程
[].valueOf() // 结果为[],valueOf返回的仍然是原数组对象,非基本类型,执行ToString
[].toString() // 结果为空字符串'',为字符串基本类型,返回

'' == false // 两边都为基本类型,类型仍然不同,两边同时执行ToNumber

// ⬇⬇⬇

// 两边同时ToNumber转化为数字类型
Number('') // 0
Number(false) // 0

0 == 0 // true

哈哈哈,虽然很扯淡,但是结果就是这样的。

练习

试试,根据上方学习到的知识,能不能尝试让自己理解以下的等式为什么是true呢?

console.log('0' == false) // true
console.log(0 == false) // true
console.log('' == false) // true
console.log([] == false) // true
console.log('' == 0) // true
console.log('' == []) // true
console.log(0 == []) // true

特殊情况undefined==null

虽然两者都是基本类型,可是遇到它们时要特殊处理,不可以使用Number进行转换,两者在==中只与彼此和自身相等,因此进行上方步骤判断时,不要忘了遇到null和undefined,不要再继续转换了。

而且根据这个特殊性质,当我们需要判断一个值为undefined或者null时,完全可以简化判断,这不是很好吗?

if (res === undefined || res === null) {
    // ...
}

// 等同于
if (res == null) {
    // ...
}

尾言

本文介绍了==的强制类型转换,虽然我知道这在工作中实用性不大,哈哈哈,不过就当是满足一下自己的求知欲吧。更多相关js []==![]内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: js为什么[]==![]是成立的吗

本文链接: https://www.lsjlt.com/news/193728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js为什么[]==![]是成立的吗
    目录前言== 与 === 的区别强制类型转换练习特殊情况undefined==null尾言前言 js是一门弱类型的语言,它的强制类型转换的迷惑性也被人诟病,例如标题提到的一个小例子,...
    99+
    2023-01-31
    js []==![]
  • 为什么JS是单线程的
    小编给大家分享一下为什么JS是单线程的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么JS是单线程的?这主要与JS的用途有关...
    99+
    2024-04-02
  • 为什么前端js是指JavaScript
    本篇内容主要讲解“为什么前端js是指JavaScript”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么前端js是指JavaScript”吧! ...
    99+
    2024-04-02
  • JS 数组sort方法的升序为什么是a-b你知道吗
    简单使用 sort 方法的时候,是按位排序的,比如: var arr = [1, 22, 15, 32, 4, 5] arr.sort()//[1,15,22,32,...
    99+
    2024-04-02
  • github是哪年成立的
    GitHub是一个广受欢迎的Git版本控制仓库和开发协作平台。它在2008年4月10号由Tom Preston-Werner、Chris Wanstrath和PJ Hyett创立。通过GitHub,用户可以分享和协作开发代码,GitHub也...
    99+
    2023-10-22
  • 独立显卡和集成显卡的区别是什么
    独立显卡和集成显卡的区别是:1、独立显卡是一块独立的硬件设备,而集成显卡则是集成在计算机主板上的一部分;2、独立显卡通常比集成显卡具有更强的图形处理能力和性能;3、独立显卡需要额外的电源供应,而集成显卡则相对较小且功耗较低;4、独立显卡是插...
    99+
    2023-08-17
  • MySQL为数据表建立索引的原则是什么
    这篇文章给大家分享的是有关MySQL为数据表建立索引的原则是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。面试题:索引是什么?索引的优点?索引的缺点?在建立索引的时候都有哪些需要考虑的因素呢为数据表建立索引的...
    99+
    2023-06-29
  • JavaScript之JS的组成与基本语法是什么
    今天小编给大家分享一下JavaScript之JS的组成与基本语法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Java...
    99+
    2023-07-05
  • 云服务器虚拟化是一种成本结构吗为什么
    云服务器虚拟化是指将传统物理服务器虚拟成多个虚拟服务器,以便在同一个云平台上支持负载均衡和容错。这样可以降低服务器的采购、维护成本,同时提高资源的利用率,从而提高云服务器的可用性和可扩展性。 云服务器虚拟化技术可以分为以下几个方面: 服...
    99+
    2023-10-27
    是一种 成本 结构
  • 建立成功的Python环境的4个基本工具是什么
    本篇内容介绍了“建立成功的Python环境的4个基本工具是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python  是一门...
    99+
    2023-06-16
  • js为什么那么难学
    这篇文章主要介绍了js为什么那么难学,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1,怎么样去把具象的问题抽象化 就是面对一个很具体的...
    99+
    2024-04-02
  • 云服务器虚拟化是一种成本结构对吗为什么
    云服务器虚拟化是将计算资源(存储、网络和其他资源)分布在多个云计算服务提供商的平台上,以提供更高的性能和更好的安全性。 与传统的服务器虚拟化技术不同,云服务器虚拟化通过将多台物理服务器虚拟成一台虚拟服务器,从而实现高性能和高可靠性,并且能...
    99+
    2023-10-27
    是一种 成本 结构
  • JS的特性是什么
    这篇文章主要介绍“JS的特性是什么”,在日常操作中,相信很多人在JS的特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS的特性是什么”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • js中的MVC是什么
    本篇内容主要讲解“js中的MVC是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js中的MVC是什么”吧!MVC是什么?MVC是一种架构模式,它将应用抽象为...
    99+
    2024-04-02
  • 建立ssl的过程是什么
    建立SSL(Secure Socket Layer)的过程如下:1. 客户端向服务器发送一个HTTPS请求。2. 服务器使用公钥加密...
    99+
    2023-08-25
    ssl
  • php时间戳转成js时间戳的方法是什么
    这篇文章主要讲解了“php时间戳转成js时间戳的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php时间戳转成js时间戳的方法是什么”吧!一、PHP中时间戳转换成时间格式在PHP中...
    99+
    2023-07-05
  • 什么是建立索引
    这篇文章主要讲解了“什么是数据库建立索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是数据库建立索引”吧! 这里想把之前...
    99+
    2024-04-02
  • JS中为什么有闭包
    本篇内容主要讲解“JS中为什么有闭包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中为什么有闭包”吧!太长不看版当「函数访问在其外部定义的变量时」,你需要闭...
    99+
    2024-04-02
  • js map方法是es6的吗
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。JavaScript中的map()方法详解(均采用es6语法)JavaScript map() 方法可以对数组的每个元素调用指定的回调函数,并返回包含结果...
    99+
    2023-05-14
    map ES6
  • 独立ip的vps为什么会不稳定
    独立ip的vps不稳定原因有:1、网站访客流量突然暴涨,导致VPS配置资源不足,从而出现卡顿、死机等情况发生;2、vps被恶意网络攻击,导致VPS无法正常运作;3、采用的国际线路出现故障,导致VPS无法被正常访问;4、vps遭受病毒侵害,使...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作