美文网首页程序员码农的世界WEB前端程序开发
记一道有十分有意思的JS面试题

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

作者: 张培跃 | 来源:发表于2019-04-02 22:34 被阅读6次

前段时间,有一学生问了我一道十分有意思的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());// true
console.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]1
console.log(a + 1 === a.toString() + 1);// true
3、该对象obj下如果有toString()方法,会调用该方法。
var a = {
    toString(){
        return 1;
    }
};
console.log(a.toString());// 1
console.log(a.toString() + 1);// 2
console.log(a + 1 === a.toString() + 1);// true
4、通过以上三点推断出:对象每进行一次比较或拼接都会执行toString方法。
var num =1;
var a = {
    toString(){
        return ++num;
    }
};
console.log(a+"");// 2
console.log(a+"");// 3
console.log(a + 1);// 5
console.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—————

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

相关文章

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

    前段时间,有一学生问了我一道十分有意思的JS面试题,现拿出来与大家进行下分享,题目如下: 下面代码中a在什么情况下...

  • 那些年遇到的面试题

    腾讯面试题 据说是小米面试题 答案: 来自国外的一道题 一道经典面试题: 杂 1.JS数据类型有哪些?哪些是引用类...

  • js基础面试题

    面试题:延迟加载JS有哪些方式? 面试题:JS数据类型有哪些? 面试题:JS数据类型考题 考题一: 考题二: 面试...

  • 前端控制并发度

    -最近看到了一道面试题,觉得还蛮有意思,就实现了一下。面试题如下:

  • 面试.md

    [TOC] 2017年第一波 JavaScript 面试题 一道常被人轻视的前端****JS面试题 目录 前言 第...

  • 一道Block面试题的深入挖掘

    0. 序言 最近看到了一道Block的面试题,还蛮有意思的,来给大家分享一下。 本文从一道Block面试题出发,层...

  • 研究方法-不同场景找权重点

    今天听到一篇很有意思的文章,给大家分享一下。微软有一道很有意思的面试题,“井盖为什么是圆形的”,当然面试者的答...

  • js面试题

    一道腾讯js面试题 题目如下: 对作用域链(scope chain)、执行环境(execution context...

  • 记一道有趣的js面试题

    让a同时等于1,2,3? 原理 1.因为==的时候会调用数组的join方法,而我们把join方法重写了,每次调用的...

  • 一道 JavaScript 面试题

    今天看到一道JavaScript 面试题, 闲着没事来做一下. 题目: 编写一个JS 函数fn, 该函数有一个参数...

网友评论

    本文标题:记一道有十分有意思的JS面试题

    本文链接:https://www.haomeiwen.com/subject/dyckvqtx.html