首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

令人头秃的js隐式转换面试题,你能做对吗

你有没有在面试中遇到特别奇葩的js隐形转换的面试题,第一反应是怎么会是这样呢?难以自信,js到底是怎么去计算得到结果,你是否有深入去了解其原理呢?下面将深入讲解其实现原理。...1、js数据类型js中有7种数据类型,可以分为两类:原始类型、对象类型:基础类型(原始值):Undefined、 Null、 String、 Number、 Boolean、 Symbol (es6新出的...,本文不讨论这种类型)复杂类型(对象值):object2、三种隐式转换类型js中一个难点就是js隐形转换,因为js在一些操作符下其类型会做一些变化,所以js灵活,同时造成易出错,并且难以理解。...参考原文 前端进阶面试题详细解答2.1、通过ToPrimitive将值转换为原始值js引擎内部的抽象操作ToPrimitive有着这样的签名:ToPrimitive(input, PreferredType...1、进行ToPrimitive转换,由于没有指定PreferredType类型,{}会使默认值为Number,进行ToPrimitive(input, Number)运算。

46720

经常被面试官问道的JavaScript数据类型知识你真的懂吗?

[数据类型封面.png] 前言 之前面试了几个开发者,他们确实做过不少项目,能力也是不错的,但是发现js基础不扎实, 于是决定写一下这篇javascrip数据类型相关的基础文章,其实也不仅仅是因为面试了他们...js弱类型语言 面试官:说说你对javascript是弱类型语言的理解?...js中的强制转换规则 面试官:javascript中强制类型转换是一个非常易出现bug的点,知道强制转换时候的规则吗? 注:规则最好配合下面什么时候发生转换使用这些规则看效果更佳。...转换,type就指定为string了,继续回到ToPrimitive进行转换(上面有将到ToPrimitive的转换规则)。...expression js中的数据类型判断 面试官问:如何判断数据类型?怎么判断一个值到底是数组类型还是对象?

59410
您找到你想要的搜索结果了吗?
是的
没有找到

帮你彻底弄懂 JavaScript 类型转换

数据类型 JS 中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及一种复杂类型:object。...从ES规范来看类型转换 ToPrimitive 在对象转原始类型的时候,一般会调用内置的 ToPrimitive 方法,而 ToPrimitive 方法则会调用 OrdinaryToPrimitive...如果引用类型上有 @@toPrimitive 方法,就调用 @@toPrimitive 方法,执行后的返回值为原始类型就直接返回,如果依然是对象,那么就抛出报错。...Symbol.toPrimitive 在 ES6 之后提供了 Symbol.toPrimitive 方法,该方法在类型转换的时候优先级最高。...[a]: 111 } 由于 a 是作为了 b 的键值,所以 preferredType 为 string,这时会调用 a.toString 方法,最后得到了'1,2,3' 总结 类型转换一直是学 JS

70910

你确定(a == 1 && a == 2 && a == 3)不能为true?

隐式转换成解题的关键 上面给出的4种解法多少有点歪门邪道的意思,为了让面试官死心,接下来的才是正解之道,而JS中的隐式转换规则大概也是出这道题的初衷。...隐式转换部分规则 JS中使用==对两个值进行比较时,会进行如下操作: 将两个被比较的值转换为相同的类型。 转换后(等式的一边或两边都可能被转换)再进行值的比较。...]函数,逻辑大致如下: 如果有Symbol.toPrimitive方法,优先调用再返回,否则进行2。...5: Symbol.toPrimitive 我们可以利用隐式转换规则3完成题目(看完答案你就知道为什么啦!)...const a = { i: 1, [Symbol.toPrimitive]() { return this.i++ } } // 每次进行a == xxx时都会先经过Symbol.toPrimitive

39730

day015: JS数据类型之问——转换篇

day015: JS数据类型之问——转换篇 1. [] == ![]结果是什么?为什么? 解析: == 中,左右两边都需要转换为数字然后进行比较。 []转换为数字为0。 !...JS中类型转换有哪几种? JS中,类型转换只有三种: 转换成数字 转换成布尔值 转换成字符串 转换具体规则如下: 注意"Boolean 转字符串"这行结果指的是 true 转字符串的例子 ?...对象转原始类型,会调用内置的[ToPrimitive]函数,对于该函数而言,其逻辑如下: 如果Symbol.toPrimitive()方法,优先调用再返回 调用valueOf(),如果转换为原始类型,则返回...如果都没有返回原始类型,会报错 var obj = { value: 3, valueOf() { return 4; }, toString() { return '5' }, [Symbol.toPrimitive

83210

一行能装逼的 JavaScript 代码

一行神奇的js代码,当时我就震惊了,这不就是传说中的ZB神奇么… … 哈哈。写本篇文章的缘由是之前看到了一段js代码,如下: (!...一、js运算符的优先级 首先要运用到的第一个知识就是js运算符的优先级,因为这么长一段运算看的人眼花,我们必须得先根据优先级分成n小段,然后再各个击破。优先级的排列如下表,优先级从高到低: ?...1、 对于非原始类型的,通过ToPrimitive() 将值转换成原始类型: ToPrimitive(input, PreferredType?)...所以得先调用toPrimitive转化为原始类型,并且PreferredType为number,这个参数表示更“倾向于”转化的类型,这里肯定是number了。...如果有人瞧不起js,请把这段代码发给他,如果他想知道答案,请把本文发给他~

1.1K40

我见过最好最详细的 JavaScript 关系的解释

"不管怎么说,我认为任何人都不会真正了解JS" 当这些案例出现时,最好查阅源代码--构建JavaScript的官方ECMAScript规范。 有了这个规范,让我们深刻理解这里发生了什么。...我将解释规范的相关部分: If x is String or Number and y is Object, return x == ToPrimitive(y) 译:如果 x 是字符串或数字类型...2.空数组变成空字符串 再次根据规范,JS首先寻找一个对象的toString方法来强制转换它。 在数组的情况下,toString连接其所有元素并将它们作为字符串返回。...所以... [].toString() // "" 规范中的ToPrimitive将空数组转换成空字符串。相关的参考在这里和这里,方便你查阅(或解决疑惑)。...这也是正确的 0 == [] // true 因为强制转换执行两次: ToPrimitive([])转换为空字符串 然后ToNumber("")转换为 0 。

55710

JS篇之数据类型那些事儿

一语中的 JS = ECMAScript + DOM + BOM DOM 并非只能通过 JS 访问 JS是「动态弱类型」语言 每个「变量」只不过是一个用于保存任意值的命名占位符 实例与构造函数原型之间有直接的联系...,但实例与构造函数之间没有 基本类型是没有任何属性和方法 对象其实就是一组数据和功能的集合 文章概要 JS组成 JS数据类型(7+1) 类型转换(装箱/拆箱) JS组成 其实这是一个很容易忽略的问题。...JS是「动态弱类型」语言。 由于JS的语言特性,我们可以进而得出另外一个结论:每个「变量」只不过是一个用于保存任意值的命名占位符。 而谈到JS数据类型,就绕不开针对数据的分类。...let strObj = new String(789); strObj.length; //3 strObj.slice(1); //"89" 拆箱转换 在 JavaScript 标准中,规定了 ToPrimitive...] = () => {console.log("toPrimitive"); return "hello"} console.log(o + "") // toPrimitive // hello

49520

彻底终结 Javascript 背后的隐式类型转换

看完此文你可以完全不需要背诵复杂冗长的 ECMA 规范, 用逻辑即可推理 现在, 我们假装从 JS 设计者的角度来聊聊隐式类型转换, 首先要记住, JS 作者的”初衷”是美好的, 他希望 == 是最顺手最快捷的比较...我们知道 Primitive(原值)和非 Primitive 比较, 需要把非 Primitive 转换成 Primitive 才可以 [] 是一个对象, 因此需要 toPrimitive() 简单的说..., 大部分对象最后都是用 toString() 来转换成 Primitive 此处没聊 toPrimitive() 中的 valueOf() 单纯是因为面试题很少涉及 你也许会问为啥是用 toString...这就是 JS 对新人友好的地方, JS 的对象都可以打印输出, 自带人性化展示, 在终端上人性化展示, 那当然是用字符串啦, 因此选择用 toString 转换 Primitive 理所因当 我们来看看数组的...要是能转的话确实要转, 但 null 和数字0本身已经是 Primitive 了, 没有机会再走一遍 toPrimitive(), 因此等号两边始终无法转换成同类型, 只能返回 false 为什么 null

87020

浅谈jsfuck编码

为什么可以只用6种字符编码js 显然一段js代码只用6种字符去写,毫无疑问可以绕过很多关键词的过滤,但是在使用之前会有一个疑问就是为什么可以这样编码一段js代码。...其实这是由于js的隐式类型转换导致的,对于逻辑表达式[]==!...原始类型和引用类型做比较时,引用类型会依照ToPrimitive规则转换为原始类型。...⭐️ToPrimitive规则,是引用类型向原始类型转变的规则,它遵循先valueOf后toString的模式期望得到一个原始类型。如果还是没法得到一个原始类型,就会抛出 TypeError。...==false,然后因为Boolean 和其他任何类型比较,Boolean 首先被转换为 Number 类型,false -> 0,变成[]==0,然后再因为原始类型和引用类型做比较时,引用类型会依照ToPrimitive

1.1K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券