javascript基础-数据类型

2020-06-29  本文已影响0人  小麻烦爱学习

转换和相等性

以下情况都是true,因为会进行隐士类型转换

null == undefined; // 这两值被认为相等
0 == '0'; //字符串转换成数字
0 == false; //false转换成数字
'0' == false; //字符串和false都转换成数字
'' == 0; //空字符串转换为数字
'' == false; // 空字符串和false转换为0,

数组/对象和数字相加

[] + 0; // "0",数组调用join方法后转换为""
{} + 0; // 0,不知道为什么为0,从结果来看对象转换为null,然后null转换为0;

字符串的加减乘除

"7" + "3"; //"73",字符串相加
"7" - "3"; //4,先转换为数字再运算
"7" * "3"; //21
"8" / "2"; //4

判断数据类型的方法

  1. typeof 运算符

期望操作数: 1个, 任何数据类型,
运算结果数据类型: 字符串
运算结果值: "stirng" "number" "undefined" "boolean" "symbol" "bigint" "object"
使用场景: 判断基本数据类型
缺点:只能判断基本数据类型,复杂类型都是"object"

typeof null;//"object" 特别注意
typeof Number(3) // "number",即使使用包装对象,依旧是number,而不是object
  1. instanceof 运算符

期望操作数: 2个, 左操作数是实例对象(基础数据类型也可以,没有意义) 右操作数是构造函数
运算结果数据类型: boolean
运算结果值: true /false
使用场景: 检测构造函数的 prototype 属性是否出现在某个实例对象的原型链
缺点:只能判断复杂数据类型,基本数据类型都是false(不能说是缺点,本来就是为判断复杂数据类型而生)

3 instanceof Number; //false,基本数据类型都是false
  1. data.constructor.name

计算结果数据类型: 字符串
使用场景: 获取数据的构造函数名称,基本数据类型也使用
缺点:只能判断数据的直接构造函数名称,无法获取父级构造函数名称.不像instanceof会查找实例的原型链

[].constructor.name// "Array"
(3).constructor.name// "Number"
  1. Object.prototype.toString.call(data)

计算结果数据类型: 字符串like this: "[object Object]"
使用场景: 判断基本数据类型和javascript内置数据类型(Date/RegExp/Function/Array)
缺点: 自定义的构造函数实例化的对象,都是"[object Object]"

Object.prototype.toString.call(3)// "[object Number]",基本数据类型
Object.prototype.toString.call(()=>{}) //"[object Function]",内置数据类型
Object.prototype.toString.call(new Date())// "[object Date]",内置数据类型
Object.prototype.toString.call(new Person()) //"[object Object]", 自己定义的构造函数都是"[object Object]"
  1. 内置全局方法

isNaN :判断是否为非数字
Array.isArray :判断数组
Object.is() 判断两个值是否相同

  • 两个值都是 [undefined]
  • 两个值都是 [null]
  • 两个值都是 true 或者都是 false
  • 两个值是由相同个数的字符按照相同的顺序组成的字符串
  • 两个值指向同一个对象
  • 两个值都是数字并且
    • 都是正零 +0
    • 都是负零 -0
    • 都是 NaN
    • 都是除零和 NaN 外的其它同一个数字
上一篇 下一篇

猜你喜欢

热点阅读