前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分享一道有十分有意思的JS面试题,附愚人节逻辑题答案

分享一道有十分有意思的JS面试题,附愚人节逻辑题答案

作者头像
用户1272076
发布2019-04-23 14:07:03
7480
发布2019-04-23 14:07:03
举报
文章被收录于专栏:张培跃张培跃

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


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

代码语言:javascript
复制
var a = ?if (a == 1 && a == 2 && a == 3) {    console.log(1);}

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

代码语言:javascript
复制
var  a = {    i: 1,    toString: function () {        return a.i++;    }}if (a == 1 && a == 2 && a == 3) {    console.log(1);}

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

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

上次愚人节答案公布:

题目:这道愚人节逻辑题足矣验证你是否拥有程序员的大脑!

答案:阿愚说的是真话,bug是阿节写的。

解题思路:

1、首先不要被题目的情节所误导,因为这道题和愚人节没有半毛钱关系。像这样的题只能用假设解决。

2、假设bug是阿愚写的,则阿愚假话,阿人与阿节为真话,由于只有一人说了真话,与条件只有一人说真话矛盾,假设不成立,故bug不是阿愚写的。

3、假设bug是阿人写的,则阿愚与阿节说的是真话,与条件矛盾,假设不成立,故bug不是阿人写的。

4、假设bug是阿节写的,一号说了真话,阿人与阿节说的是假话,与条件只有一人说真话相符,假设成立。

5、故阿愚说了真话,bug是阿节写的。

最后祝愿大家每天都可以早点下班!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、对象在与字符串拼接或比较时,首先会通过valueOf()方法来调用其原始值。原始值即其本身的值。
  • 2、如果值为对象,则会调用toString()方法。若对象本身没有该方法,会返回"[object ObjectName]",其中 ObjectName 是对象类型的名称。
  • 3、该对象obj下如果有toString()方法,会调用该方法。
  • 4、通过以上三点推断出:对象每进行一次比较或拼接都会执行toString方法。
  • 5、现在再来看下答案是不是很简单了?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档