首页 > 其他分享 >JS中==和===的区别

JS中==和===的区别

时间:2022-09-01 23:44:40浏览次数:61  
标签:转换 区别 valueOf Number JS 类型 toString 字符串

== 和 ===的区别

使用双等号进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较;
使用三等号进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false;

==的判断流程

  1. 首先判断两者类型是否相同,相同的话就比较两者的大小;类型不相同的话,就会进行类型转换。
  2. 判断是否在对比 nullundefined,是的话就会返回 true
  3. 判断两者类型是否为 String 和 Number,是的话就会将字符串转换为 number
  4. 判断其中一方是否为 Boolean,是的话就会把 Boolean 转为 Number 再进行判断。
  5. 判断其中一方是否为 Object 且另一方为 String、Number 或者 Symbol,是的话就会把 Object 转为原始类型再进行判断。

强制类型转换规则

string转number

String 类型的值转换如同使用 Number() 函数进行转换,如果包含非数字值则转换为 NaN,空字符串为 0。

  • 如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。如果数值前有前置0,会忽略。
  • 如果字符串包含有效的浮点值格式,则会转换为相应的浮点值(同样,忽略前面的零)。
  • 如果字符串包含有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整数值。
  • 如果是空字符串(不包含字符),则返回0。
  • 如果字符串包含除上述情况之外的其他字符,则返回NaN。

Boolean转Number

true转1,false转0。其中Boolean为false的值有null、undefined、false、+0、-0、NaN、空字符串

对象转基本类型

对象在转换基本类型时,会调用 valueOf 和 toString。如果倾向于将对象转换为Number,则调用valueOf();倾向于转换为String类型,则调用toString()。

  1. 普通对象:valueOf方法返回对象本身,而toString方法返回"[object ObjectName]";
  2. Array:valueOf方法放回数组本身。而toString方法将 Array 的每个元素转换为字符串,并将它们依次连接起来,两个元素之间用英文逗号作为分隔符进行拼接
  3. Date:valueOf方法放回时间戳。而toString方法返回日期的文本表示。
  4. Function:valueOf方法返回方法本身。而toString方法返回"function functionname() { [native code] }"。

标签:转换,区别,valueOf,Number,JS,类型,toString,字符串
From: https://www.cnblogs.com/cxuep/p/16648248.html

相关文章

  • envi5.3打开失败JSON_PARSE: Invalid string, no closing '"'
    发现破解好的ENVI5.3崩溃了,错误如下: ---------------------------Warning---------------------------JSON_PARSE:Invalidstring,noclosing'"'---------------......
  • linux shell中'',""和``的区别
    linuxshell中'',""和``的区别-XuFeng-博客园 https://www.cnblogs.com/Skyar/p/5914942.html今天学习一个bash脚本,看到有一条:bin=`dirname"$0"`(dirnamefilenam......
  • react 启动报错 ERROR in ./node_modules/fs-extra/lib/copy/copy-sync.js 5:13-28
    项目运行好好的,然后就报一堆错误起初我以为我安装了依赖倒置的问题,后来我只输出helloworld都出错。折腾两晚上。。。还是度娘帮了我Compiledwithproblems:XERROR......
  • ES6模块化和CommonJS模块化
    我之前学习模块化的时候,曾在node中使用过,它采用的时CommonJS模块化标准,源自于JavaScript社区自发产生。CommonJS使用方法为:导入:require('模块名')模块对外共享成员使用m......
  • three.js学习 -- 在three.js中引入obj文件
    在引入obj文件前确保自己已经完成three.js的初始化(初始化scene,camera,renderer)接着将所需要展示的obj文件放在项目中根据官方文档中的描述constloader=newOBJLoader(......
  • 【js】for 循环中使用 setTimeout 的问题
    问题:下面代码的输出结果不是间隔3秒依次输出1,2,3,4,5。而是隔了3秒连续输出6。这是为什么呢?for(vari=1;i<=5;i++){setTimeout(functiontimer(){......
  • [转]CMake与Make最简单直接的区别
    写程序大体步骤为:1.用编辑器编写源代码,如.c文件。2.用编译器编译代码生成目标文件,如.o。3.用链接器连接目标代码生成可执行文件,如.exe。但如果源文件太多,一个一个编译......
  • native <-互相调用-> js
    WebViewWebView提供了这些方法-提供了这些方法```addJavascriptInterfacecanGoBackcanGoBackOrForwardcanGoForwardcapturePictureclearCacheclearFormData......
  • 2022-8-31 jsp el表达式
    jsp<%--JSP脚本片段:用于在JSP页面写java代码--%>注意:1、JSP脚本片段中只能出现java代码,不能出现HTML元素。在 访问JSP时,JSP引擎翻译JSP页面中的......
  • 【js与native通信】1 通信协议制定
    通过native<-互相调用->js知道WebView有一个方法setWebChromeClient,可以设置WebChromeClient对象。而WebChromeClient对象中有三个方法,分别是onJsAlert......