hgq's docs
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)

guoguoqiqi

漫不经心的向往
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)
  • JS数据类型
  • JS数据类型的转换
  • 判断数据类型的方法
  • null和undefined的区别
  • parseInt方法解析
  • promise简答
  • var和let以及const的区别
  • 本地存储的几种方式
  • 闭包是什么
  • 调用new的过程
  • 防抖和节流
  • 简单讲讲异步的理解
  • 简单讲讲原型和原型链
  • 判断变量的数据类型
  • 深浅拷贝
  • 数组去重的方法
  • 说一说JS中的this
  • 作用域和作用域链
  • JS的内置对象
  • JS继承的几种实现方式
  • 谈谈你对this、call、apply和bind的理解
  • 说一说原型、原型链
  • 什么是闭包,为什么使用闭包
  • JS中事件冒泡与捕获
  • 说一说JS的事件模型
  • 常用的遍历数组的方法
  • 如何创建一个Ajax
  • js 延迟加载的方式有哪些
  • 谈谈你对模块化开发的理解
  • js 的几种模块规范
  • ES6 模块与 CommonJS 模块、AMD、CMD 的差异
  • JS的运行机制、单线程、事件循环、宏任务微任务
  • arguments 的对象是什么
  • 简单介绍一下 V8 引擎的垃圾回收机制
  • 哪些操作会造成内存泄漏
  • ES6有哪些新特性
  • 说一说箭头函数
  • 什么是高阶函数
  • 为什么函数被称为一等公民
  • js的深浅拷贝
  • 函数柯里化
  • 说一说new操作符
  • 说一说对Promise的理解
  • Generator函数是什么,有什么作用
  • 说一说async和await
  • instanceof的原理是什么,如何实现
  • js 的节流与防抖
  • 相关面试题集合
  • 如何更好的处理async、await的异常
  • JS的事件委托
  • 浏览器和node中事件循环的区别
  • mouseover 和 mouseenter 的区别
  • ===与Object is的区别
  • 数组去重有哪些方法
  • 页面在浏览器中渲染出来的原理和流程
  • js和css是否会阻塞页面的渲染
  • Set、Map、WeakSet 和 WeakMap 的区别
  • 说一说Promise的实现原理
  • 说一说JS的事件循环
  • == 和 === 与隐式转化
    • 说一说回流(重排)和重绘
    • script标签中添加async或defer的作用与区别
    • 如何中断一个请求
    • 遍历一个对象身上属性的方法有哪些
    • 常用的数组方法(不改变原数组)
    • 常用的数组方法(改变原数组)
    • 常用字符串操作方法
    • 对象身上与原型相关的方法
    • 数组的reduce方法
    • 常用的位运算符有哪些
    • 浮点数运算有误差的问题
    • typeof和instanceof的区别
    • 有关js和css对页面渲染阻塞的问题
    • 说说对闭包的理解
    • DOMContentLoaded方法
    • es6中对象新增的方法
    • es6中数组新增的方法
    • es6中字符串新增的方法
    • es6新增的Reflect
    • 如何判断一个变量是否是数组
    • onload 和 DOMContentLoaded的区别
    • 大文件上传问题
    • 上传、下载和普通请求的区别
    • Javascript
    guoguoqiqi
    2022-02-24

    == 和 === 与隐式转化

    # 两者的区别

    ===是严格比较,类型与值都相等才会返回true,==在类型不同的时候会进行隐式转化,转化后如果值相同,也会返回true。

    # ==的类型隐式转化场景

    1. 当 x或者y为NaN的时候。这时候我们就用到了一句话,NaN跟谁都不等,包括他自己。

    2. 当x,y都为null, undefined的时候,不会进行类型转化,得到的结果都是true。

    3. 当x或y都为 string,boolean,number的时候,数据类型不一致的时候,会先转化成number在进行比较。

    console.log( 1 == '1' );//true   1 == Number('1')
    console.log( false == '0' );//true   Number(false) == Number('0')  0 == 0
    console.log( '' == 0); // true  Number('') == 0
    console.log( 1 === true) // true  Number(true) == 1
    console.log( false == 0 ) // true 
    
    
    1
    2
    3
    4
    5
    6
    1. 当x或y存在引用类型的时候,会先转化成 原始值,再进行比较;

    引用类型转化原始值:会先调用对象的的valueOf()方法获取原始值,在调用toString()方法转化成字符串比较;

    • valueOf:这里可以忽略,对象类型默认valueOf会返回自身。
    • toString: 数组的toString方法本质是调用了join()转化成字符串,相信这样说大家都能理解了吧。 对象的toString返回的是固定的字符串 [object Object]。
    console.log( [10,20,30] == '10,20,30' );//true
    console.log( [] == '' );//true 
    console.log( [] == 0 );//true  (1) [].toString  (2) '' == 0 (3) 0 == 0
    console.log( {name:'张三'} == '[object Object]');//true 
    console.log( {} == '' );//false 
    console.log( {} == '[object Object]' );//true
    console.log( {} == 0 );//false c
    console.log( ![] == 0 );//true ![] == 0 是true,这里是隐式规则转布尔型! Boolean([]) = !true = false
    
    1
    2
    3
    4
    5
    6
    7
    8

    注意 *

    !运算符的优先级要高于比较运算符

    1. x,y都为引用类型的时候,这里比较的是地址;

    # 参考文章链接

    数据比较 == 和 === 与隐式转化 (opens new window)

    ← 说一说JS的事件循环 说一说回流(重排)和重绘→

    最近更新
    01
    vuex数据持久化怎么做
    05-22
    02
    vue的动态路由怎么配置使用
    05-22
    03
    vue权限控制一般怎么做
    05-22
    更多文章>
    Theme by Vdoing | Copyright © 2022-2022 Guoquoqiqi | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式