资讯专栏INFORMATION COLUMN

隐式转换实质

jiekechoo / 2473人阅读

摘要:如果被标志为,则会进行下面的操作来转换输入的值如果输入的值已经是个原始值,则直接返回它。否则,抛出异常。如果被标志为,则转换操作的第二步和第三步的顺序会调换。参数结果布尔值被转换为转换为数字无需转换字符串由字符串解析为数字。

隐式转换实质 ToPrimitive():将值转换为原始值

JavaScript 引擎内部的抽象操作 ToPrimitive()有着这样的签名:

ToPrimitive (input,PreferredType?)

可选参数 PreferredType 可以是 Number 或者 String,它只代表了一个转换的偏好,转换结果不一定必须是这个参数所指的类型,但转换结果一定是一个原始值。如果 PreferredType 被标志为 Number,则会进行下面的操作来转换输入的值(59.1):

如果输入的值已经是个原始值,则直接返回它。

否则,如果输入的值是一个对象。则调用该对象的 valueof ()方法。如果 valueOf()方法的返回值是一个原始值,则返回这个原始值。

否则,调用这个对象的 toString()方法。如果 tostring()方法的返回值是一个原始值,则返回这个原始值。

否则,抛出 TypeError 异常。

如果 PreferredType 被标志为 string,则转换操作的第二步和第三步的顺序会调换。如果没有 PreferredType 这个参数,则 preferredrype 的值会按照这样的规则来自动设置:Date 类型的对象会被设置为 string,其它类型的值会被设置为 Number.

ToNumber():将值转换为数字

下面的表格解释了 ToNumber()是如何将原始值转换成数字的。

参数 结果
undefined NaN
null +0
布尔值 true 被转换为 1, false 转换为+0
数字 无需转换
字符串 由字符串解析为数字。例如,"324"被转换为 324

如果输入的值是一个对象,则会首先会调用 roPrimitive (obj, Number)将该对象转换为原始值,然后在调用 roNumber()将这个原始值转换为数字。

ToString():将值转换为字符串

下面的表格解释了 ToString()是如何将原始值转换成字符串的。

参数 结果
undefined "undefined"
null "null"
布尔值 “true"或者"false"
数字 数字作为字符串,比如。"1.765*"
字符串 无需转换

如果输入的值是一个对象,则会首先会调用 toPrimitive (obj,String)将该对象转换为原始值,然后再调用 roString()将这个原始值转换为字符串。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94472.html

相关文章

  • Front-end developmenter必看,超实用的javaScript隐式类型转换规则记忆

    摘要:下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容类型转换需要使用到的函数对于布尔值用到的是对于数值,用到的是当然还有但是对于隐式类型转换的时候,调用的是前者。 javaScript类型转换规则 javaScript的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。 但其实...

    fuchenxuan 评论0 收藏0
  • 理解JS中的加号运算符

    摘要:中的基本数据类型有种,引用数据类型则是指除了上述基本数据类型以外的所有值,比如隐式类型转换加法的隐式转换转换为原始值当需要转换为原始值时,引擎内部会进行抽象操作。 showImg(https://segmentfault.com/img/bVbqjVM); 基本运算规则 +的使用有两种情况 当+连接两个变量或值时即为二元运算符,比如a + b,当+在变量或值前面时,则为一元运算符,比...

    nodejh 评论0 收藏0
  • 33 个 js 核心概念(四):显式 (名义) 与 隐式 (鸭子)类型转换

    摘要:相对于显式使用,隐式转换则更加简洁。隐式转换为布尔值将其他类型值隐式转换为布尔值是我们最常用的一种转换。在以下场景中,都是进行判断,而只要传入的值不是布尔值,都会通过隐式类型转换转为布尔值。原文地址阿木木的博客与隐式鸭子类型转换 showImg(https://segmentfault.com/img/remote/1460000017309581); 前言 说实话,JavaScrip...

    hoohack 评论0 收藏0
  • 从 ++[[]][+[]]+[+[]]==10? 深入浅出弱类型 JS 的隐式转换

    摘要:与此相对,强类型语言的类型之间不一定有隐式转换。三为什么是弱类型弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等。在中,加性运算符有大量的特殊行为。 从++[[]][+[]]+[+[]]==10?深入浅出弱类型JS的隐式转换 本文纯属原创? 如有雷同? 纯属抄袭? 不甚荣幸! 欢迎转载! 原文收录在【我的GitHub博客】,觉得本文写的不算烂的...

    miya 评论0 收藏0
  • 基础回顾-javascript数据类型

    摘要:栈区由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。属性返回对创建此对象的构造函数的引用。所有的和都是宿主对象参考高级程序设计堆和栈的概念和区别全面解析中的数据类型与类型转换 数据类型 数据类型划分 javascript中定义了6中基本数据类型(原始值类型),和一种复杂数据类型(引用类型),所谓复杂类型,其本质是由无序的名值对(key:val...

    codergarden 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<