js面试题大坑隐式类型转换Word下载.docx

上传人:b****5 文档编号:19920531 上传时间:2023-01-12 格式:DOCX 页数:9 大小:574KB
下载 相关 举报
js面试题大坑隐式类型转换Word下载.docx_第1页
第1页 / 共9页
js面试题大坑隐式类型转换Word下载.docx_第2页
第2页 / 共9页
js面试题大坑隐式类型转换Word下载.docx_第3页
第3页 / 共9页
js面试题大坑隐式类型转换Word下载.docx_第4页
第4页 / 共9页
js面试题大坑隐式类型转换Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

js面试题大坑隐式类型转换Word下载.docx

《js面试题大坑隐式类型转换Word下载.docx》由会员分享,可在线阅读,更多相关《js面试题大坑隐式类型转换Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

js面试题大坑隐式类型转换Word下载.docx

1.2-隐式转换规则

1.转成string类型:

+(字符串连接符)2..转成number类型:

++/--(自增自减运算符)+-*/%(算术运算符)>

<

>

=<

===!

====!

===(关系运算符)

2.转成boolean类型:

!

(逻辑非运算符)

1.3-坑一:

∙常见面试题如下

 

console.log(1+"

true"

);

//‘1true‘’

 

console.log(1+true);

//2

console.log(1+undefined);

// 

NaN

console.log(1+null);

//1

∙原理分析

/*此类问题的坑:

将字符串连接符(+:

只要+号两边有一边是字符串)与算术运算符(+:

两边都是数字)的隐式转换搞混淆

1.字符串连接符+:

会把其他数据类型调用String()方法转成字符串然后拼接

2.算术运算符+:

会把其他数据类型调用Number()方法转成数字然后做加法计算

*/

//+是字符串连接符:

String

(1)+'

true'

='

1true'

//1true

//+是算术运算符:

1+Number(true)=1+1=2

//+是算术运算符:

1+Number(undefined)=1+NaN=NaN

1+Number(null)=1+0=1

1.4-坑二:

常见面试题如下

console.log("

2"

10);

//false

10"

//true

abc"

b"

//false

"

aad"

console.log(NaN==NaN);

console.log(undefined==null);

//true

//2.1:

当关系运算符两边有一边是字符串的时候,会将其他数据类型使用Number()转换,然后比较关系

//false 

Number('

2'

)>

10 

2>

false

/*2.2:

当关系运算符两边都是字符串的时候,此时同时转成number然后比较关系

重点:

此时并不是按照Number()的形式转成数字,而是按照字符串对应的unicode编码来转成数字

使用这个方法可以查看字符的unicode编码:

字符串.charCodeAt(字符下标,默认为0)

//true 

'

.charCodeAt()>

10'

.charCodeAt()=50>

49=true

.charCodeAt());

//数字50

//数字49(默认返回第一个字符的编码,如果想要查询第二个字符可以传参下标)

//多个字符从左往右依次比较

先比较'

a'

和'

b'

,'

与'

不等,则直接得出结果

和'

,两者相等,继续比较第二个字符'

得出结果

a"

//数字97

//数字98

//2.3特殊情况(无视规则):

如果数据类型是undefined与null,,得出固定的结果

console.log(undefined==undefined);

console.log(null==null);

//2.4特殊情况(无视规则):

NaN与任何数据比较都是NaN

1.5-坑三:

/*复杂数据类型转number顺序如下

1.先使用valueOf()方法获取其原始值,如果原始值不是number类型,则使用toString()方法转成string

2.再将string转成number运算

console.log([1,2]=='

1,2'

先将左边数组转成string,然后右边也是string则转成unicode编码运算

console.log([1,2].valueOf());

//[1,2]

console.log([1,2].toString());

//'

vara={};

console.log(a=="

[objectObject]"

console.log(a.valueOf().toString());

//[objectObject]

/*分析:

逻辑与运算一假则假,要想if分支语句小括号条件成立,则必须要让a的值同时等于1且等于2且等于3

乍看之下,好像根本不可能实现,但是复杂数据类型会先调用valueOf()方法,然后转成number运算

而对象的valueOf()方法是可以重写的

vara={

i:

0,//声明一个属性i

valueOf:

function(){

return++a.i;

//每调用一次,让对象a的i属性自增一次并且返回

}

if(a==1&

&

a==2&

a==3){//每一次运算时都会调用一次a的valueOf()方法

1"

1.6-坑四:

∙前方高能,请注意~

o空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串`[objectObject]`(注意第一个小写o,第二个大写O哟)

∙常见面试题

//大坑

console.log([]==0);

console.log(!

[]==0);

//神坑

console.log([]==!

[]);

console.log([]==[]);

//史诗级坑

console.log({}==!

{});

console.log({}=={});

/*1.关系运算符:

将其他数据类型转成数字

2.逻辑非:

将其他数据类型使用Boolean()转成布尔类型

*以下八种情况转换为布尔类型会得到false

*0、-0、NaN、undefined、null、'

'

(空字符串)、false、document.all()

*除以上八种情况之外所有数据都会得到true

/*原理 

(1)[].valueOf().toString()得到空字符串

(2)Number('

)==0成立

/*原理:

本质是`!

[]`逻辑非表达式结果与 

0比较关系

(1)逻辑非优先级高于关系运算符!

[]=false(空数组转布尔得到true,然后取反得到false)

(2)false==0成立

/*原理:

本质其实是`空对象{}` 

与 

`!

{}` 

这个逻辑非表达式结果做比较

(1){}.valueOf().toString()得到字符串'

[objectObject]'

(2)!

{}=false

(3)Number('

)==Number(false)

//引用类型数据存在堆中,栈中存储的是地址,所以他们的结果是false

/*原理:

本质是`空数组[]` 

[]` 

(1)[].valueOf().toString()得到空字符串'

[]=false

)==Number(false) 

成立都是0

console.log({}.valueOf().toString())//[objectObject]

console.log([].valueOf().toString());

//'

空字符串

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1