Javascript中数据类型那些可能会中招的细节

前端 2023-07-05 17:29:38
65阅读

 

序言

Javascript的基本数据类型针对大伙儿而言一点也不默认设置,关键基础数据局种类和引入基本数据类型,全是新手入门必会的知识要点,并且在日常开发设计中,经常应用。大伙儿是不是都把握在其中的一些关键点呢?下边大家就详尽讨论一下。

一、number种类常见问题

number种类包含:正数、负值、0、小数、NaN

NaN:意思是not a number 并不是一个有效数字,可是它是归属于number种类的

(1) = 和 == 和 ===的差别

  •  = 是取值
  •  == 是分辨上下两侧的值是不是相同(非严苛分辨,只需字面上相同则相同)
  •  === 是分辨上下两侧是不是想相同,严苛分辨(包括基本数据类型,种类和字面上相同才相同)

(2) NaN

  •  NaN 和 NaN 不是相同的,NaN == NaN回到的是false
  •  isNaN();检验一个值并不是有效数字的出题是不是创立,是有效数字则回到false,并不是有效数字回到的才算是true

isNaN() 假如检验的值并不是number种类,电脑浏览器会默认设置把值变换为number种类,随后在分辨是不是为有效数字

 
  1. 比如:  
  2.      console.log(isNaN("123"))  // 复印結果是 true  
  3. 流程:   
  4.    1、最先把"123"转化成number种类的,应用Number()转换规则  
  5.    2、随后分辨number种类的值是不是达到isNaN的标准 
  •   Number()方式 强制性将别的基本数据类型变为number种类(强制性数据信息类型转换) 
 
  1. Number()方式  强制性将别的基本数据类型变为number种类,  
  2. 规定:如果是字符串数组,字符串数组中一定都必须是数据才能够 变换  
  3. 比如:Number("12")回到的結果是12,Number("12px")回到的結果便是NaN 
  •   非强制性数据信息类型转换 parseInt()/ parseFloat() 
 
  1. parseInt: 从左往右,一个个标识符搜索,把是数据的变为有效数字,半途假如碰到了一个非有效数字,就没有再次搜索了  
  2. parseFloat: 和上边一样,能够 多鉴别一个小数位。  
  3. 比如:parseInt('12px')的数值 12 
  4.      parseFloat('12.5px')的数值 12.5 

二、基本数据类型的转换方法

常见的boolean变换标记

  •  ! 一个惊叹号是取反,最先将值转换为布尔类型的值,随后取反
  •  !! 2个惊叹号是将别的的数据信息类型转换为 boolean 种类,等同于Boolean()

转换方法:

1、假如只有一个值,分辨这一值是真還是假,遵照:仅有 0 NaN "" null undefined 这五个是假,其他的全是真

 
  1. 比如:  
  2.     console.log(!3)  // false  
  3.     console.log(![]) // false  
  4.     console.log(!{}) // false     
  5.     console.log(!null) // true  
  6.     console.log(!0) // true  
  7.     console.log(!undefined) //true  
  8.     console.log(!"")) //true 

留意: 这里 数字0才为假,如果是字符串数组的'0',一样为真

 
  1. 比如:  
  2.   if(0){  
  3.     console.log("为真")  
  4.   }else{  
  5.     console.log("为假")  
  6.   }  
  7.   if('0'){  
  8.      console.log("为真")  
  9.   }else{  
  10.      console.log("为假")  
  11.   }  
  12.   第一个輸出 为假,第二个輸出 为真 

2、如果是2个值较为是不是相同,遵照这一标准:

val1 == val2 2个值很有可能并不是同一基本数据类型的,如果是 == 较为得话,会开展默认设置的数据信息类型转换

  •  1)、目标 == 目标,始终不相同
  •  2)、目标 == 字符串数组 现将目标变换为字符串数组(启用toString的方式 ),随后在开展较为 
 
  1. [] 变换为字符串数组 ""  
  2. {} 变换为字符串数组 "[object Object]"     
  3. 因此:  [] == "" 为 true  
  4.       {} == "" 为 false 
  •  3)、目标 == 布尔类型 目标先变为字符串数组(toString),随后把字符串数组变换为数据(Number),布尔类型也变换为数据(true是1 false 是0),最终让2个数据较为   
 
  1. 比如:  
  2.        console.log([] == false) // 为 true  
  3.        分析:最先 []变为字符串数组"",随后字符串数组变为数据种类number,Number("")結果为0,false  
  4.        变为数据种类,Number(false) 結果也为0,因此 [] == false, 就分析变成 0与0的较为,因此相同,  
  5.        回到true  
  •  4)、目标 == 数据 目标先变为字符串数组(toString),随后把字符串数组变换为数据(Number)
  •  5)、数据 == 布尔运算 布尔运算类型转换为数据
  •  6)、数据 == 字符串数组,字符串数组变换为数据
 
  1. 比如:5 == '5' // 为 true 
  •  7)、字符串数组 == 布尔运算 都变换为数据
  •  8)、null === undefined 結果是true 
 
  1. console.log(null == undefined) // true 
  •  9)、null和undefined 和别的一切基本数据类型也不相同 
 
  1. console.log(null == 0) // false  
  2. console.log(undefined == 0) // false 

3、除开== 是较为,===也是较为(肯定较为),假如基本数据类型不一样毫无疑问不相同

 
  1. 比如:  
  2.     console.log(0 == false) // true  
  3.     console.log(0 === fasle) // false      
  4.     console.log(5 == "5") // true  
  5.     console.log(5 === "5") // false  
  6.     console.log(null == undefined) // true  
  7.     console.log(null === undefined) // false 

三、typeof(基本数据类型检验)

typeof 用于检验基本数据类型的,使用方法:typeof 要查验的值,

回到一个字符串数组,包括了基本数据类型的标识符( "number","string","boolean","undefined","function","object")

  •  typeof null 回到的結果是 "object"
  •  typeof undefined 回到的結果是 "undefined"

尽管null 和 undefined 同是number基本数据类型,可是根据typeof检验的值并不是number,并且都不同样。

  •  typeof null 結果是 "object"
  •  typeof [] 結果是 "object"

留意:同是目标基本数据类型的 二维数组、正则表达式、目标的检验种类全是"object"

typeof 局限:不可以实际的查验object下细分化的种类

 
  1. console.log(typeof typeof typeof typeof []) // "string"  
  2. 这里复印的是"string" 

tip:由于typeof 回到的值便是一个字符串数组,假如采用了2个及其2个之上的typeof 回到的全是 "string"种类

四、基础基本数据类型和引入基本数据类型的不同之处

事例:

 
  1. 场景一:  
  2.     var num1 = 12 
  3.     var num2 = num1 
  4.     num2 ;  
  5.     console.log(num1);    
  6.  场景二:  
  7.     var obj1 = {"name":"张三"};  
  8.     var obj2 = obj1 
  9.     obj2.name = "李四" 
  10.     console.log(obj1.name);   
  11.     场景一复印的数值 12, 场景二复印的数值 "李四" 

剖析:基础基本数据类型的值是实际的值,这里的var num2=num1;便是将num1的值 12给num2,这时num2和num1的值同是12,可是和num1的num2的值互相有关,因此无论num2如何变,num1全是12,都始终不变。引入基本数据类型,储存的是数据信息运行内存的详细地址,var obj1 = {"name":"张三"} 是开拓一个室内空间来储放{"name":"张三"}值,随后将obj1偏向储存值的详细地址,这时,var obj2 = obj1,便是将obj1偏向存储空间的详细地址取值给obj2,两个都偏向同一个内存地址,相匹配的同一个值。因此后边obj2变更存储空间里边name的值后,obj1的值也会更改。

写到最终

再次回望基本的专业知识,发觉之前很懵懂无知的专业知识好像一瞬间懂了很多,例如所述的引入基本数据类型偏向的是存储空间的详细地址,相取值实际操作后,实际操作取值后的值会危害原来的值的結果。因此才拥有日常日常生活常常应用的深拷贝和浅拷贝,便是为了更好地避开更改2个值相互之间危害的状况;之前都最顾着自身迅速的去入门做新项目,学习培训架构的內容,却忽略了这种更为基础的物品。当基本把握的充足扎扎实实的情况下,也便会看全都恍然大悟了。

【责编:庞桂玉 TEL:(010)68476606】
关注点赞 0
the end
免责声明:本文不代表本站的观点和立场,如有侵权请联系本站删除!本站仅提供信息存储空间服务。