很急很关键!!!关键javascript中的类型转换

js是一门弱类型的语言,类型转换不可避免

一、显式类型转换

1.toString()方法

js的内置对象都重写了这个方法,用来返回字符串(Object.prototype.toString.call(obj)判断数据类型)

var num=10;
num.toString();//'10'

//toString函数接受参数表示返回字符串按什么进制
var num=10;
num.toString(2);//'1010'

2.parseInt()方法转换而数字,第一个参数是待转换的原字符串,第二个参数表示原字符串的进制

var str=parseInt('10',8);//8

3.强制转换,利用构造函数

Boolean(0);//false
Boolean(new Object());//true
Boolean([]);//true 
Number([]);//0
Number(undefined);//NaN
Number(null);//0
String(null);//'null'
String([]);//''

 

二、隐式转换

1.基本类型的转换

  1.四则运算,加减乘除

    1.对于加法+,只要两个操作数中有一个String类型,数字转成字符串,只有一个操作数时则返回数字

var str='12';
var num=+str;
console.log(typeof num);//number

    2.其余的如-,*,/都是将操作符转为数字,不能转则返回NaN

    3.>,<在两个操作数都是字符串情况下进行字符串比较,否则转为数字

12-'2';//10
12-'a';//NaN
12*'2';//24
12*'a';//NaN
12/'2';//6
12/'a';//NaN
12>'2';//true
12>'a';//false,字符串不能转成数字返回NaN,NaN与数字进行比较时都返回false
12<'a';//false

  2.==

    1.undefined等于null

    2.字符串和数字比较时,字符串转为数字

    3.数字和布尔值比较时,布尔转数字

    4.字符串和布尔比较时,两者都转数字

'0' == 0;//true
'0' == false;//true
!!'0';//true
null == undefined;//true
undefined == false;//false,undefined!=false
null == false;//false,null!=false

2.引用类型的转换

  1.引用类型==比较的是引用的地址,只有指向同一个引用类型才会返回true

var arr=[];
console.log(arr==[]);//false
var obj={};
console.log(obj=={});//false

  2.引用类型转布尔值全为true

  3.引用类型和基本类型的比较,先把引用类型转换成基本类型。

    对象到字符串的转换经过了如下步骤:
      1.如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,js将这个值转换成字符串,并返还这个字符串结果。
      2.如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么js将调用valueOf()方法。
      3.否则,js无法从toString()或者valueOf()获得一个原始值,因此这时它将抛出一个类型错误异常。
    对象到数字的转换过程首先尝试使用valueOf()方法:
      1.如果对象具有valueOf()方法,后者返回一个原始值,则js将这个原始值转换成数字,并返回这个数字。
      2.否则,如果对象具有toString()方法,后者返回一个原始值,则js将转换并返回。
      (首先js转换成相应的字符串原始值,再继续将这个原始值转换成相应的数字类型,再返回数字)
      3.否则,js抛出一个类型错误异常。

[] == false;//true,[].toString()===''
[0] == false;//true
{} == true;//false,{}->NaN
{} == false;//false
{x:0} == true;//false
{x:0} == false;//false

 

数组的toString方法返回由数组中每个元素的字符串形式拼接而成的一个以逗号分隔的字符串
数组的valueOf方法返回的还是数组
[].valueOf() === []
[].toString() === ''
{}.valueOf() === {}
{}.toString() === '[object Object]'

 

转载于:https://www.cnblogs.com/lee1993/p/6781695.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值