作者:原罪

来源:SegmentFault 思否社区

不管是在技术聊天群还是论坛里,总能碰到 x + y 等于多少的问题,比如 ,如果你不了解其中的原理,那么就插不上话,只能眼睁睁地等大佬解答了。

Type

说到底还是JS类型转换的问题,首先我们先温习一下JS的7种内置类型:

Number

String

Boolean

Null

Undefined

Object

Symbol

是不是感觉还有Function,毕竟能用typeof获取到?不,函数、数组都是Object的子类型。

类型分为和两种,除了对象,其它都是基本类型。

To Primitive

发音:[ pr m t v]

结构:toPrimitive(input, preferedType = number)

在对象的隐式转换中,对象需要先转成基本类型,并按照如下顺序执行。

对象会先调用。

如果没有valueOf这个方法或者valueOf返回的类型不是基本类型,那么对象会继续调用方法。

如果没有toString这个方法或者toString返回的类型不是基本类型,那么直接抛出异常。

接着,我们看下各个对象的转换实现

ate的默认preferedType=string,即在加法运算中先执行toString()。在 - | * | / | +x | -x 等运算中,先执行valueOf()数组的toString()可以等效为

其中,数组toString()时,遇到null, undefined都被忽略,遇到symbol直接报错,遇到没有toString()的对象也报错。

To Number

一些特殊值转为数字的例子,等下要用到

加减法 +-

加减法运算中遵循了一些隐式转换规则:

遇到对象先执行ToPrimitive转换为基本类型,然后按照基本类型的规则处理

加法过程中,遇到字符串,则会被处理为

上面的对象最后也都转成了字符串,遵循本条规则。接着来几个纯字符串的例子

减法操作时,一律需要把类型转换为Number,进行数学运算

加法操作时,遇到非字符串的基本类型,都会转Number

+ x 和 一元运算 +x 是等效的(以及- x),都会强制转换成Number

回到一开始抛出的问题,这样太简单了吧?

对象字面量{}在最前面则不代表对象

不是对象是什么?是你的八块腹肌?别急,看看经典的例子

这啥玩意?说好的"[object Object]"呢?

好吧,这是其实代表的是代码块,最后就变成了,根据前面的原则,数组先被转换成字符串,接着因为+x的运算,字符串被转成数字。

那 { a: 2 } 总该是对象了吧?其实这时候不是代表对象属性,而是被当成了标签(label),标签这东西IE6就已经有了。所以如果我们写成 这样是会报错的,逗号要改成分号才能通过编译。

symbol不能加减

如果在表达式中有symbol类型,那么就会直接报错。比如报错如下:

宽松相等 ==

相等于全等都需要对类型进行判断,当类型不一致时,宽松相等会触发隐式转换。下面介绍规则:

对象与对象类型一致,不做转换

对象与基本类型,对象先执行ToPrimitive转换为基本类型

数字与字符串类型对比时,字符串总是转换成数字

布尔值先转换成数字,再按数字规则操作

null、undefined、symbol

null、undefined与任何非自身的值对比结果都是false,但是 是一个特例。

对比

对比不像相等,可以严格相等(===)防止类型转换,对比一定会存在隐式类型转换。

对象总是先执行ToPrimitive为基本类型

任何一边出现非字符串的值,则一律转换成数字做对比

html中隐式转换成数字,关于 JS 类型隐式转换的完整总结相关推荐

  1. 利用小程序实现AI识字,把纸质内容转换成数字内容,手写文字转换成word

    手写电脑苹果  载 将手写转化为文字软件 文字转手写 手写字怎么转换成文本 手写文字识别. 通过手机,把手写的文字转化成电子文字,无需任何的扫描仪,只要手机拍照,马上就能将纸上的文字提取到你的手机上. ...

  2. java字符串日期转换成数字,Java字符串到日期的转换

    用Java将" 2010年1月2日"格式的String转换为Date的最佳方法是什么? 最终,我想将月份,日期和年份分解为整数,以便可以使用 Date date = new Dat ...

  3. 如何把Excel中的文本数字转换成数字

    把excel数据导入数据库时,有时要把数据格式统一,把文本数字转换成数字.有三种在excel中直接转换的方法 ,另外一种是宏的方法. 1.数据--分列 (最快) 2.查错 3.输入1,复制--粘贴-- ...

  4. 字符串转换成数字的三种方法

    最近经常遇到关于类型转换的问题,索性上网搜搜在此总结一篇 js字符转换成数字主要有三种可用的方法:转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和p ...

  5. js 字符串转换成数字的 三种方法

    在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...

  6. js 字符串转换成数字(转)

    原文地址:http://blog.csdn.net/sam2007/archive/2009/04/01/4040427.aspx 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两 ...

  7. 微信小程序之js 字符串转换成数字的三种方法, 取float型小数点后两位数的方法

    在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...

  8. js实现字符串数组转换成数字数组

    js实现字符串数组转换成数字数组的几种方式 1. 遍历方式实现 var turnNum = function(nums){for(let i=0;i<nums.length;i++){nums[ ...

  9. js将字符串转换成数字的四种方法

    方法主要有四种 1转换函数.2强制类型转换.3利用js变量弱类型转换.4在字符串前面添加个+ 1.转换函数 js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后 ...

最新文章

  1. EditPlus 更新到 v2.31 Build 488(附下载)
  2. 设计模式之观察者模式demo
  3. 信息学奥赛一本通(1139:整理药名)
  4. Express框架的安装通信测试 - 讲解篇
  5. Dumpsys Input Diagnostics
  6. Java基础笔记(一)
  7. python爬网站信息_爬取网页信息的小能手——微软PowerBI
  8. 20190914每日一句
  9. 【路径规划】基于matlab A_star算法求解机器人栅格地图最短路径规划问题【含Matlab源码 1388期】
  10. hadoop 2.7.3 源码编译教程
  11. 什么是WEBserver? 经常使用的WEBserver有哪些?
  12. 树的计数 + prufer序列与Cayley公式(转载)
  13. 一类Chen混沌系统的混沌吸引子——MATLAB实现
  14. es6模板字符串里用html标签,为ES6模板字符串计算标签函数
  15. CNGI高校驻地网IPv6用户数量排名
  16. 天下无敌宇文拓,一肩担尽古今愁
  17. 【生物信息学】正常和突变的蛋白质结构可视化?构建蛋白结构模型,常见的4种构建蛋白模型方法
  18. dva去掉访问路径中的“#”
  19. Android ListView下拉刷新
  20. golang入门笔记——kitex

热门文章

  1. 求最小连续和(洛谷P1614题题解,Java语言描述)
  2. 【Python】Python中的类型转换
  3. Hadoop2.x环境搭建
  4. 算法研究:插入类排序(简单插入,折半插入,希尔排序)
  5. C++学习笔记—srand()和rand()
  6. ipsec *** 的总结性谈论
  7. 加载exe的PE信息并输出相关PE信息的一段c++代码
  8. [CSS]RevealTrans 滤镜
  9. 最详细的企业级可视化大屏教程,90%的需求看这一篇就足够了
  10. 顶级公司在做数据挖掘,却忽略了数据管理平台,这个知识不得不看