资讯专栏INFORMATION COLUMN

关于JS类型转换的笔记

Cc_2011 / 2263人阅读

摘要:文献权威指南类型转换章节对象到的具体代码跟对象到的类似,只不过是方法的优先级变换了,跟规则是吻合的。

javascript是一门弱类型语言,不同的基础数据之间的运算自己会进行一个相关的类型转换,如常见的
var t = "test", b = t + 12 //"test12"

这些常见的类型转换比较熟悉,但是涉及到关于对象与原始值之间的运算,类型转换规则比较特殊

基础知识点:
var t = {a: 1, b: 2}
t.toString() //"[object Object]"
t.valueOf() //{a: 1, b: 2}即对象本身
var arr = [1,2,3,4]
arr.toString() //"1,2,3,4"类似arr.join(",")

对象均有toString,valueOf两个方法

转换规则: 对象->String

1:如果对象的toString方法存在,那么调用toString,若该对象返回的值为原始值,则将该原始值转换为字符串返回(若该值不为字符串的话)
2:如果对象的toString方法返回的不是原始值,且valueOf方法存在,调用valueOf方法,若该对象返回的值为原始值,则将该原始值转换为字符串返回(若该值不为字符串的话)
3:若对象的toString与valueOf方法返回的值均不为原始值,那么Throw TypeError的错误。

//规则1
function t(){
    return 1
}
console.log(t + 3) //"function t(){↵ return 1↵}3"
//修改toString方法
t.toString = function(){
    return "bbbbbb"
}
console.log(t + 3) //"bbbbbb3"

console.log(t.valueOf())
/*
function t(){
    return 1
}
*/
//不为原始值

//再次修改toString方法,使其返回的值不为原始值
t.toString = function(){
    return {a:1}
}

console.log(t + 3) // Uncaught TypeError: Cannot convert object to primitive value

//那么重写valueOf方法
t.valueOf = function(){
    return "ffffdffffd"
}

console.log(t + 3) //"ffffdffffd3"
//这时,再修改toString

t.toString = function(){
    return "3333dd"
}

console.log( t + 3 ) //"3333dd3"

    
对象->number

1:如果对象的valueOf方法存在,那么调用valueOf,若该对象返回的值为原始值,则将该原始值转换为数字返回(若该值不为数字的话)
2:如果对象的valueOf方法返回的不是原始值,且toString方法存在,调用toString方法,若该对象返回的值为原始值,则将该原始值转换为数字返回(若该值不为数字的话)
3:若对象的toString与valueOf方法返回的值均不为原始值,那么Throw TypeError的错误。

文献:javascript权威指南 类型转换章节

对象到number的具体代码跟对象到string的类似,只不过是方法的优先级变换了,跟规则是吻合的。

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

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

相关文章

  • JS关于JS一些知识点(JS基础,纯记录)

    摘要:如何让根据拆箱转换,以及的隐式转换,可以如下写为什么计算机中所有的数据都是以二进制存储的,所以在计算机计算时要把数据先转换成二进制进行计算,然后把计算结果转换成十进制。会存在精度丢失问题和的二进制都是以无线循环的小数的二进制的二进制 本想着记笔记里,但是笔记里没有分类,还是以文章的形式,当个人总结吧,这一篇就当作JS基础篇的记录吧,有修改的和新增的持续更新~ 关于JS的一些小技巧 1:...

    SwordFly 评论0 收藏0
  • JavaScript高级程序设计学习笔记三(基本语法)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。在中非空字符串,非零数字,任意对象,都被认为。而空字符串,和,,认为是。用于表示整数和浮点数。标识符由数字字母下划线美元符组成,但首字母不能是数字。变量方法对象命名推荐驼峰法。 JavaScript语法 一.语法简介 因为JavaScript语法和Java等语法非常类似。所以只是简单介绍一下。 大小写 JavaScript是大小写敏感的语...

    Mike617 评论0 收藏0
  • JS. ES5重点笔记】数据类型

    摘要:是最特殊的类型,表示没有意义的数,例如。十六进制数八进制数十进制数十六进制数对于部分情况,和存在分歧。例如,表示希腊字符关于字符串的转换,其实核心就是函数,如果是数字型,还可以添加参数,使之变为二进制八进制十进制十六进制数。 虽然目前已经算是ES6的时代,然是ES5的尾巴仍在众多框架中出现,JS我虽然通过视频等方式学习,曾经做过项目,但是仍对部分细节和原理不了解,通过阅读这本书,希望能...

    Yu_Huang 评论0 收藏0
  • 重学前端学习笔记(六)--JavaScript类型有哪些你不知道细节?

    摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...

    Lsnsh 评论0 收藏0
  • 重学前端学习笔记(六)--JavaScript类型有哪些你不知道细节?

    摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...

    joyvw 评论0 收藏0

发表评论

0条评论

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