JS进阶(一)数据类型与隐式转换

1)基本数据类型

string、 number、null、undefined、 boolean、bigInt、symbol

Number类型中NaN不是有效数字但是属于Number类型,typeof NaN  //=> ‘number‘
NaN === NaN  // => false
Object.is(NaN,NaN)  // => true
BigInt出现的意思是保证超出最大最小安全值仍然可以准确计算
console.log(Number.MAX_SAFE_INTEGER); //=>9007199254740991
console.log(Number.MIN_SAFE_INTEGER); //=>-9007199254740991
9007199254740991n  =>bigint类型的

(2)引用数据类型【2】

  • object
  •     普通对象 {} 
  •     实例对象 new xxx
  •     日期对象 new Date
  •     正则对象 new RegExp
  •     原型对象 prototype
  •     数组对象 Set Array
  • ....
  • function

2.数据类型的检测

1.typeof
能检测基本类型和函数类型,但是对于对象类型和null不能区分(null为计算机历史遗留问题)
typeof function(){} // ‘function’
typeof NaN // ‘number’
2.constructor
[].constructor === Array
3.instanceof
4.Object.prototype.toString.call()
Object.prototype.toString.call([]) // “[object Array]”

3.数据类型的隐式转换

(1)转化为Number类型的情况

  • 使用Number显式类型转换, 转换过程中,遇到对象会先toString然后在Number转换

  • 例子:
    Number()、Number(null)、Number("")、Number(false) 结果为 0
    Number(undefined) 、 Number({})、 Number(‘wds’), 结果为 NaN
    Number(true) , 转化结果为 1
    Number([‘2222’]) 结果为 2222
    Number([‘2222’,‘1111’]) 结果为NaN
    Number(‘1,2’)
    ————————————————

  • 使用加号减号等运算符隐式转换, 转换过程中,遇到对象会先toString然后在Number转换

     

  • 例子:
    
    ‘123’ 结果为 123
    [] 、+null、+false 结果为 0
    {}、+ ‘abc’ 、+ undefined 结果为 NaN
    true 结果为 1
    1 + true 结果为 2
    注意??: NaN + 任何数都是NaN、字符串和对象除外,会转成字符串拼接
    NaN+123、NaN+ true、NaN+NaN 结果都为NaN
    NaN + {} 结果为 “NaN[object Object]”
    NaN + [] 结果为 “NaN”
    

    使用isNaN进行检测的时候,会隐式转换为数字在检测,转换过程中,遇到对象会先toString然后在Number转换  

JS进阶(一)数据类型与隐式转换

上一篇:[ASP.NET Core开发实战]开篇词


下一篇:.NET Core3.1 解决跨域问题 Startup的配置