记一道有十分有意思的JS面试题

作者 : 开心源码 本文共1117个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共147人阅读

前段时间,有一学生问了我一道十分有意思的JS面试题,现拿出来与大家进行下分享,题目如下:


下面代码中a在什么情况下会打印1?:

var a = ?if (a == 1 && a == 2 && a == 3) {    console.log(1);}

这题目猛一看,怎样可能?但事实上答案其实很简单,如下:

var  a = {    i: 1,    toString: function () {        return a.i++;    }}if (a == 1 && a == 2 && a == 3) {    console.log(1);}

看不明白?到现在能否有种怀疑自己学过的JS是假的感觉?来看下解题思路:

1、对象在与字符串拼接或者比较时,首先会通过valueOf()方法来调用其原始值。原始值即其本身的值。
var a ={};console.log(a.valueOf());// {}console.log(a === a.valueOf());// trueconsole.log(typeof a.valueOf());// object
2、假如值为对象,则会调用toString()方法。若对象本身没有该方法,会返回”[object ObjectName]”,其中 ObjectName 是对象类型的名称。
var a = {};console.log(a.toString());// [object Object]console.log(a.toString() + 1);// [object Object]1console.log(a + 1 === a.toString() + 1);// true
3、该对象obj下假如有toString()方法,会调用该方法。
var a = {    toString(){        return 1;    }};console.log(a.toString());// 1console.log(a.toString() + 1);// 2console.log(a + 1 === a.toString() + 1);// true
4、通过以上三点推断出:对象每进行一次比较或者拼接都会执行toString方法。
var num =1;var a = {    toString(){        return ++num;    }};console.log(a+"");// 2console.log(a+"");// 3console.log(a + 1);// 5console.log(a == 5);// true
5、现在再来看下答案是不是很简单了?
var  a = {    i: 1,    toString: function () {        return a.i++;    }}if (a == 1 && a == 2 && a == 3) {    console.log(1);}

—————END—————

喜欢本文的朋友们,欢迎关注公众号 张培跃,收看更多精彩内容!!!公众号回复 电子书 ,送你经典前台电子书籍!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 记一道有十分有意思的JS面试题

发表回复