dashengzi66 / note

学习笔记
0 stars 0 forks source link

数据类型 #8

Open dashengzi66 opened 3 years ago

dashengzi66 commented 3 years ago

分类

原始值类型「值类型/基本数据类型」

对象类型「引用数据类型」

dashengzi66 commented 3 years ago

数据类型检测

dashengzi66 commented 3 years ago

数据类型转换

把其它数据类型转换为number

  1. Number(一般用于浏览器的隐式转换中) 规则 @1 把字符串转换为数字:空字符串变为0,如果出现任何一个非有效数字字符,结果都是NaN @2 把布尔准换为数字 @3 null->0 undefined->NaN @4 Symbol 无法转换为数字,会报错 @5 BigInt 去除“n”(超过安全数字的,会依照科学计数法处理) @6 把对象转换为数字

    先调用对象的Symbol.toPrimitive这个方法,如果不存在这个方法
    
    再调用对象的valueOf获取原始值,如果获取的值不是原始值
    
    再调用对象的toString将其变为字符串
    
    最后再把字符串基于Number方法转换为数字
  2. parseInt([val],[radix])

    radix不写或者写0,默认是10进制(如果第一个传递的字符串以“0x”开始的,那么默认是16进制)
    
    radix取值范围:2~36,不在这个范围内,处理的结果都是NaN
    
    在传递的字符串中,从左到右,找到符合radix进制的值(遇到不符合的则结束查找),把找到的值,看做radix进制,最后转换为10进制
  3. parseFloat([val])

parseInt和parseFloat一般用于手动转换,规则:[val]值必须是一个字符串,如果不是则先转换为字符串;然后从字符串左侧第一个字符开始查找,把找到的有效数字字符最后转换为数字(一个都没到就是NaN);遇到一个非有效数字字符,不论后面是否还有有效数字字符,都不再查找了;parseFloat可以多识别一个小数点;

把其它类型转换为string

[val].toString() & String([val])
原始值类型:基于引号包起来,bigInt会去掉n
对象类型值:
  1.调用Symbol.toPrimitive
  2. 如果不存在则继续调用 valueOf 获取原始值,有原始值则把其转换为字符串
  3. 如果不是原始值,则调用toString转换为字符串
特殊:普通对象转换为字符串是 “[object Object]”   -> Object.prototype.toString

“+”代表的字符串拼接
 1.有两边,一边是字符串,则会变为字符串拼接
 2.有两边,一边是对象,按照 Symbol.toPrimitive -> valueOf -> toString 处理,变为字符串后,就直接按照字符串拼接处理了有特殊情况:{}+10  -> 10   他认为{}是代码块,处理的只是+10这个操作
 3.只出现在左边,例如:+[val]  这是把[val]转换为数字    ++i(先累加再运算) & i++(先运算再累加) 

把其它类型转换为布尔

除了“0/NaN/空字符串/null/undefined”五个值是false,其余都是true

“==”比较时候的相互转换规则

对象==字符串   对象转换为字符串「Symbol.toPrimitive -> valueOf -> toString」

null==undefined  -> true   null/undefined和其他任何值都不相等,null===undefined -> false
对象==对象  比较的是堆内存地址,地址相同则相等

NaN!==NaN 

除了以上情况,只要两边类型不一致,剩下的都是转换为数字,然后再进行比较的 
dashengzi66 commented 3 years ago

number详细讲解