资讯专栏INFORMATION COLUMN

数据类型转换、==和===的判断

MASAILA / 418人阅读

不同数据类型做比较的时候,都需要进行数据类型的转换!本文介绍常见数据类型转换的方法,相等和严格相等的判断规律

一、其他类型转换成布尔类型 1、使用场景:

对于括号里的表达式,会被强制转换为布尔类型

if ("") {
    console.log("empty")
}
2、转换规则
类型 结果
Undefined false
Null false
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true
3、举个栗子
if ("hello") {
    console.log("hello")
} //hello

// 题目2:如下代码输出什么?
if ("") {
    console.log("empty")
} //undefined

// 题目3:如下代码输出什么?
if (" ") {
    console.log("blank")
} //blank
// 题目4:如下代码输出什么?
if (+0.00) {
    console.log("blank")
} //undefined
4、小建议

写代码以后不要写成下面这样,不要再if内放变量。变量转换成布尔类型,会有很多状态。可以写成判断类型的语句如(a==="")。
if(a){
console.log("blank")
}

二、其他元素的转换成数字(toNumber) 1、使用场景:

判断是否相等==

2、转换规则
类型 结果
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123 , ""->0 , " "->0 空字符串和含有空白字符串的字符都为0
Object 先调用 .valueOf 方法获取结果。如果没定义,再尝试调用 .toString方法获取结果(数据运算符那篇文章有详细介绍)
三、== 的判断

经验就是把双方转换成数字

1、转换规则
类型 结果 结果
Undefined Null true 特例记住 undefined == null
Number any x == toNumber(y)数字和任何数据相比,把其他数据转换成数字在比较
Boolean (any) toNumber(x) == y 只要布尔类型先转换成数字,再比较
Object String or Number toPrimitive(x) == y 对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转换成原始类型的值,再进行比较。
otherwise otherwise false
2、举个例子
"" == 0  // true           false
" " == 0  //true 
"" == true  //false
" " == true  //false
!" " == true  // false  ,(!" "就是布尔类型的false)
"hello" == true  //false   "hello"转换成数字为nan,true转换成数字1
"0" == false  //true
"00" == false  //true
"0.00" == false  //true
undefined == null  //true
true== {}  //false  {}调用tostring为[object Object]
[] == true  //false  对象的toString方法默认返回[object Object]

var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  // false 自定义valueof之后,对象转换数字返回的是1
四、严格相等 1、不同类型的值

如果两个值的类型不同,直接返回false

2、复合类型值

两个复合类型(对象、数组、函数)数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址。如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2 // true

反例

{} === {} // false
[] === [] // false
(function () {} === function () {}) // false
//比较两个空对象、两个空数组、两个空函数,结果都是不相等。
//原因是对于复合类型的值,严格相等运算比较的是,它们是否引用同一个内存地址,
//而运算符两边的空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false
3、特例

例子1:NaN与任何值都不相等(包括自身)

NaN == NaN  // false
NaN === NaN  // false

例子2:正0等于负0

+0 === -0 // true

例子3:undefined和null与自身严格相等

undefined === undefined // true
null === null // true
var v1;
var v2;
v1 === v2 // true
//由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108632.html

相关文章

  • JS重要知识点记录(一)

    摘要:包装对象即,与数值字符串布尔值相对应的三个原生对象。显示类型转换强制转换即,显示调用函数进行类型转换。返回对象的字符串数值或布尔值表示,通常与返回的值相同。 一、类型与包装对象 1. 类型 原始类型: number string boolean null undefined Symbol 对象类型: Object Array Function 原始类型(基本类型)和对象类型(引...

    HtmlCssJs 评论0 收藏0
  • js数据类型判断转换

    摘要:看到下面的题,是不是已经蒙了,读完这篇文章,就能顺利通关了没有输出数据类型判断数据类型数据类型一共有种,类型判断特殊情况由此可以看出,不能区分数组,和对象运算符返回一个布尔值,表示对象是否为某个构造函数的实例。 前言 无论笔试还是面试,总会问到数据类型和隐式转换。今天彻底整理一下这块的知识,希望对大家有帮助。 看到下面的题,是不是已经蒙了,读完这篇文章,就能顺利通关了 console....

    xinhaip 评论0 收藏0
  • 【JavaScript 学以致用】值判断以及类型转换

    摘要:隐式强制类型转换隐式强制类型转换指的是一些特殊的操作的副作用来实现类型转换,而非和等函数来实现值的类型转换。下面几种情况会发生布尔值的强制类型转换语句中的天健判断表达式。 引言 来到北京已经有4个年头了,做过一些测试、打杂、前端的工作之后,最后还是选择了前端的工作。现阶段主要还是在写业务代码,代码质量,工作效率就显得尤为重要。【学以致用】这个系列主要记录一些平时工作、学习遇到的一些问题...

    AZmake 评论0 收藏0
  • 温故js系列(1)-基本数据类型引用数据类型判断&存储访问&类型转换

    摘要:引用数据类型引用数据类型值指保存在堆内存中的对象。访问方式是按引用访问。数据类型检测操作符是检测基本类型的最佳工具。未定义布尔值字符串数值对象或函数用于检测引用类型,可以检测到它是什么类型的实例。 前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总 欢迎提issues斧正:数据类型 回味,无穷! 数据类型定义 数据类型分类 基本数据...

    jone5679 评论0 收藏0
  • JavaScript核心语法——数据类型

    摘要:原始类型分别有类型类型和类型三种。类型中存在一个特殊的值叫。也可以把其他类型的数据自动转换为类型运算符运算符判断原始类型语法结构变量名称。 数据类型 1.数据类型的概述;在JavaScript代码中,能够表示并且操作值的类型就叫做数据类型数据类型可以分成可变类型和不可变类型,可变类型的值是可以修改的。相反不可变类型的值是不可以修改的。数据类型还有原始类型(原始值)与引用类型(内置对象)...

    wfc_666 评论0 收藏0

发表评论

0条评论

MASAILA

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<