美文网首页纵横研究院前端基础技术专题社区
一个简单的面试题引发的js基础学习

一个简单的面试题引发的js基础学习

作者: 想做个文人 | 来源:发表于2019-05-06 15:25 被阅读0次
技术性的东西,我一直喜欢去看别人的很少去自己总结写出来,可能是自己的理解能力不够强,需要大量的文字才能描述清楚,所以一直也不想弄写这种东西,随便写吧,没深度,写深度一点的呢,研究不了那么透彻。

这段时间看到一些文章,唯一有点印象,也是以前从没想过的,感觉很神奇的题目如下:

var a = ?;

if(a == 1 && a == 2 && a == 3){

console.log(1);

}

当a是什么情况的时候会打印1?
当时看到这个题目是很懵x的状态,还能这样???可能是本人脑子不灵活吧,根本就搜索不到这个是考察了js的什么知识点,问了同事后,才恍然大悟,应该是对隐式类型的转换的考察。

看到这个题目一开始会想,a难道会变??a肯定不能是一个基本数据类型吧,如果不会变的话,那它怎么又能等于1又能等于3呢?
最先想到的是Object.defineProperty属性!对属性进行拦截操作

Object.defineProperty(window, 'a', {
    get: function() {
        return this.value = this.value ? (this.value += 1) : 1;
    }
})

每次查询a的值的时候获取到的值都会进行+1操作

解法2
  • 利用toString
var a = {
  value: 1,
  toString() {
      return a.value++
  }
}

当进行==操作的时候,右边的是number类型,所以左边的a是object,先进行类型转换转成number,调用toString方法或者是toValue方法

解法3
  • 利用toValue
    这个和toString类似
解法4

最骚气的解法
用数组的方法

var a = [1,2,3];
a.join = a.shift;

当a == 1的时候,数组会进行类型转换,调用join方法,而数组的join方法被覆盖,获取到的值是每次弹出来的数组的第一位。


写在最后:
对于遇到==号的时候的类型转换须知
== 如果两者类型不同,首先需要进行类型转换。具体流程如下:

1, 首先判断两者类型是否相同,如果相等,判断值是否相等.
2,如果类型不同,进行类型转换
3,判断比较的是否是 null 或者是 undefined, 如果是, 返回 true .
4,判断两者类型是否为 string 和 number, 如果是, 将字符串转换成 number
5,判断其中一方是否为 boolean, 如果是, 将 boolean 转为 number 再进行判断
6,判断其中一方是否为 object 且另一方为 string、number 或者 symbol , 如果是, 将 object 转为原始类型再进行判断

第一次写这种总结型的文章,写出来也需要多看,最重要的还是需要理解,希望自己以后能产出一些高品质的文章吧

相关文章

  • 前端相关大杂烩

    前端基础面试题(JS部分) 前端基础面试题(JS部分)学习 React.js 比你想象的要简单 原文地址:Lear...

  • 一个简单的面试题引发的js基础学习

    当a是什么情况的时候会打印1?当时看到这个题目是很懵x的状态,还能这样???可能是本人脑子不灵活吧,根本就搜索不到...

  • Javascript学习地图

    学习地图 多分享多总结 js基础 面试题 笔试题 好的代码 新的问题

  • 前端JavaScript面试技巧

    1-1 课程概述 要做什么?——讲解前端 JS 基础面试题 哪些部分?——JS 基础,JS-WEB-API,JS ...

  • js 基础面试题

    js 基础面试题 1 js中使用typeof能得到哪些类型? undefined、string、number、bo...

  • 变量声明提升

    变量声明提升是JS中一个基础的问题,同时也是对JS词法作用域认识的一个提升。在JS面试题中,关于变量声明提升的问题...

  • JS基础和WebAPIs的关联性

    学习ECMAscript标准规定的基本语法掌握JS基础语法只学习JS基础做不了网页交互效果学习JS基础语法是为了后...

  • React-Native 随笔

    学习基础: js的基础知识, rect.js基础 JSX语法基础 FlexBox布局 安装 安装node.js下载...

  • JavaScript 笔记整理

    ~~~ Basis ~~~ JS可以让网页呈现各种动态效果。先学习基础语法和如何使用DOM进行简单操作。 JS代...

  • js 后端开发基础面试题

    js 后端开发基础面试题 1 为什么要用node? Node.js 是谷歌 V8 引擎(公认最快的 Javascr...

网友评论

    本文标题:一个简单的面试题引发的js基础学习

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