JavaScript数据类型转换

3.数据类型转换

「类型转换」分为显式类型转换隐式类型转换 每种转换又分为原始类型转换对象类型转换

笔试题:0.1+0.2 __0.3?>
JS 采用的是双精度版本,这个版本就存在精度问题,就导致了上边这种情况。
计算机的信息全部转化为二进制进行存储的,那么 0.1 的二进制表示的是一个无限循环小数,该版本
的 JS 采用的是浮点数标准需要对这种无限循环的二进制进行截取,从而导致了精度丢失,造成了 0.1
不再是 0.1 ,截取之后 0.1 变成了 0.100...0010.2 变成了 0.200...002 。所以两者相加的
数大于 0.3 。

面试官:0.1 不等于 0.1 了,那为什么我在控制台上输出 console.log(0.1) 还等于 0.1 呢?
	输入内容进行转换的时候,二进制转换成十进制,然后十进制转换成字符串,在这个转换的过程中发生
了取近似值,所以打印出来的是一个近似值


parseInt()/parseFloat([val,[进制]]) 对于字符串来说,它从左到右依次查找有效的数字字符,
直到遇到非有效数字字符,停止查找(不管后边是否还有数字,都不在进行差最后啊,把找到的当做数
字返回)
Object.is() 与原来的比较操作符 “===”、“==” 的区别?

知识点:
两等号判等,会在比较时进行类型转换。
三等号判等(判断严格),比较时不进行隐式类型转换,(类型不同则会返回false)。
Object.is 在三等号判等的基础上特别处理了 NaN-0+0 ,保证 -0+0 不再相同,但 Object.is(NaN, NaN) 会返回 true.
Object.is 应被认为有其特殊的用途,而不能用它认为它比其它的相等对比更宽松或严格。

答案:
使用双等号进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较。
使用三等号进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false。
使用 Object.is 来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0+0 不再相等,两个 NaN 认定为是相等的。

强制类型转换和隐式转换

常见强制转换主要是Number,Boolean,String这三个函数
1.Boolean()函数
只有这五种情况是false,其它情况都为true
undefined
null
-0+0
NaN
""(空字符串)
2.Number()函数
下面分成两种情况讨论,一种是参数是原始类型的值,另一种是参数是对象。
(1)原始类型值
原始类型值的转换规则如下。
    // 数值:转换后还是原来的值
    Number(324) // 324
    // 字符串:如果可以被解析为数值,则转换为相应的数值
    Number('324') // 324
    // 字符串:如果不可以被解析为数值,返回 NaN
    Number('324abc') // NaN
    // 空字符串转为0
    Number('') // 0
    // 布尔值:true 转成 1,false 转成 0
    Number(true) // 1
    Number(false) // 0
    // undefined:转成 NaN
    Number(undefined) // NaN
    // null:转成0
    Number(null) // 02)对象

简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组或者空数组。

   Number({a: 1}) // NaN
   Number([1, 2, 3]) // NaN
   Number([5]) // 5
   Number([])  // 0
3.toString()和String()的区别:

两个函数都可以进行强制类型转换,只有String()可以把参数里的所有传值都转换为String类型,而toString()在转换null和undefined时会报错。

    var a = null;
    var b = a.toString(); // 发生错误
    var c = String(a); // c = null
隐式类型转换
不同类型的数据互相运算。
   123 + 'abc' // "123abc"  自动转换为String
第二种情况,对非布尔值类型的数据求布尔值。
   if ('abc') {   // 根据Boolean规则,对‘abc’隐式转换
     console.log('hello')
   }  
3.除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。
'5' - '2'   // 3
'5' * '2'  // 10
true - 1   // 0
false - 1  // -1
'1' - 1    // 0
'5' * []    // 0
false / '5' // 0
'abc' - 1   // NaN
null + 1 // 1
undefined + 1 // NaN
+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0
基本包装类型

基本包装类型:Boolean,Number,String

基本包装类型:本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者方法,那么这种类型就不在是基本类型了,而是基本包装类型,这个变量也不是普通的变量,而是基本包装类型对象。
String
// 1 字符方法
charAt()    	//获取指定位置处字符
charCodeAt()  	//获取指定位置处字符的ASCII码
str[0]   		//HTML5,IE8+支持 和charAt()等效
// 2 字符串操作方法
concat()   		//拼接字符串,等效于+,+更常用
slice()    		//从start位置开始,截取到end位置,end取不到
substring() 	//从start位置开始,截取到end位置,end取不到
substr()   		//从start位置开始,截取length个字符 (重点记这个)
// 3 位置方法
indexOf()   	//返回指定内容在元字符串中的位置
lastIndexOf() 	//从后往前找,只找第一个匹配的
// 4 去除空白   
trim()  		//只能去除字符串前后的空白
// 5 大小写转换方法
to(Locale)UpperCase() 	//转换大写
to(Locale)LowerCase() 	//转换小写
// 6 其它
search()
replace()
split()
fromCharCode()
// String.fromCharCode(101, 102, 103); //把ASCII码转换成字符串

上次的知识点应该还有个数据类型转换 不过数据类型转换就非常的多了 这个需要大家见一次记一次了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值