JS-隐士类型转换‘1’+1、‘1’-1、++‘1’为什么不一样?
当 x=’1’时,
x+1
x-1
+x
-x
++x
typeof(x+1)
typeof(x-1)
typeof(+x)
typeof(-x)
typeof(++x)
的结果分别是多少?
答案:
x+1 //’11’
x-1 //0
+x//1
-x//-1
++x //2
typeof(x+1) //’string’
typeof(x-1) //’number’
typeof(+x) //’number’
typeof(-x) //’number’
typeof(++x) //’number’
首先,“+”和“-”是一元运算符,也是二元运算符。
一元加法(+)
一元加法运算符把操作数转换为数字(或者NaN),并返回这个转换后的数字。如果操作数本身就是数字,则直接返回这个数字。
+1 // => 1: 操作数本身就是数字,则直接返回这个数字
+‘1’ // => 1: 把字符串转换为数字
+‘-1’ // => -1: 把字符串转换为数字
一元减法(-)
当“-”用做一元运算符时,它会根据需要把操作数转换为数字,然后改变运算结果的符号。
-1 // => -1: 操作数本身就是数字,改变运算结果的符号
-’1’ // => -1: 把字符串转换为数字,再改变运算结果的符号
-'-1'// => 1: 把字符串转换为数字,再改变运算结果的符号
二元加法(+)
二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作:
当两个操作数都是数字或都是字符串的时候,计算结果是显而易见的。然而对于其他情况来说,则要进行一些必要的类型转换,并且运算符的行为依赖于类型转换的结果。加号的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数将会转换为字符串,加法将进行字符串的连接操作。如果两个操作数都不是类字符串(string-like)的,那么都将进行算术加法运算。 从技术上讲,加法操作符的行为表现为: ·如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值,在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。
这里有一些例子:
1 + 2 // => 3: 加法
"1" + "2" // => "12": 字符串连接
"1" + 2 // => "12": 数字转换为字符串后进行字符串连接
1 + {} // => "1[object Object]": 对象转换为字符串后进行字符串连接
true + true // => 2: 布尔值转换为数字后做加法
2 + null // => 2: null转换为0后做加法
2 + undefined// => NaN: undefined转换为NaN后做加法
需要特别注意的是,当加号运算符和字符串和数字一起使用时,需要考虑加法的结合性的对运算顺序的影响。也就是说,运算结果是依赖于运算符的运算顺序的,比如:
1 + 2 + " blind mice"; // => "3 blind mice"
1 +(2 + " blind mice"); // => "12 blind mice"
第一行没有圆括号,“+”运算符具有从左至右的结合性,因此两个数字首先进行加法计算,计算结果和字符串进行连接。在第二行中,圆括号改变了运算顺序:数字2和字符串连接,生成一个新字符串,然后数字1和这个新字符串再次连接,生成了最终结果。
二元减法(-)
当“-”用做二元运算符时,它会根据需要把操作数转换为数字,然后再进行减法运算。
1-0 // => 1: 减法
'1'-0 => 1: 字符串转为数字后进行减法运算
'1'-'0' => 1: 字符串转为数字后进行减法运算
递增(++)
需要注意的是,“++”运算符从不进行字符串连接操作,它总是会将操作数转换为数字并增1。表达式++x并不总和x=x+1完全一样。
var x='1';
var y=x+1; //y的值是‘11’
var z=++x;//z的值是2
typeof(y));// "string"
typeof(z));//"number"
总结:
JavaScript中的某些运算符会做隐式的类型转换,有时用于类型转换。一元运算符“+”,“-”,“++”,二元元算法“-”都会把操作数隐式的转换为数字,二元运算符“+”比较特殊,当有操作数是字符串,它将会把另外一个操作数转换为字符串。
x + "" // 等价于String(x)
+x // 等价于Number(x)
当 x=’1’时,
x+1
x-1
+x
-x
++x
typeof(x+1)
typeof(x-1)
typeof(+x)
typeof(-x)
typeof(++x)
的结果分别是多少?
答案
x+1 //’11’
x-1 //0
+x//1
-x//-1
++x //2
typeof(x+1) //’string’
typeof(x-1) //’number’
typeof(+x) //’number’
typeof(-x) //’number’
typeof(++x) //’number’
首先,“+”和“-”是一元运算符,也是二元运算符。
一元加法(+)
一元加法运算符把操作数转换为数字(或者NaN),并返回这个转换后的数字。如果操作数本身就是数字,则直接返回这个数字。
+1 // => 1: 操作数本身就是数字,则直接返回这个数字
+‘1’ // => 1: 把字符串转换为数字
+‘-1’ // => -1: 把字符串转换为数字
一元减法(-)
当“-”用做一元运算符时,它会根据需要把操作数转换为数字,然后改变运算结果的符号。
-1 // => -1: 操作数本身就是数字,改变运算结果的符号
-’1’ // => -1: 把字符串转换为数字,再改变运算结果的符号
-'-1'// => 1: 把字符串转换为数字,再改变运算结果的符号
二元加法(+)
二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作:
当两个操作数都是数字或都是字符串的时候,计算结果是显而易见的。然而对于其他情况来说,则要进行一些必要的类型转换,并且运算符的行为依赖于类型转换的结果。加号的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数将会转换为字符串,加法将进行字符串的连接操作。如果两个操作数都不是类字符串(string-like)的,那么都将进行算术加法运算。 从技术上讲,加法操作符的行为表现为: ·如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值,在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。
这里有一些例子:
1 + 2 // => 3: 加法
"1" + "2" // => "12": 字符串连接
"1" + 2 // => "12": 数字转换为字符串后进行字符串连接
1 + {} // => "1[object Object]": 对象转换为字符串后进行字符串连接
true + true // => 2: 布尔值转换为数字后做加法
2 + null // => 2: null转换为0后做加法
2 + undefined// => NaN: undefined转换为NaN后做加法
需要特别注意的是,当加号运算符和字符串和数字一起使用时,需要考虑加法的结合性的对运算顺序的影响。也就是说,运算结果是依赖于运算符的运算顺序的,比如:
1 + 2 + " blind mice"; // => "3 blind mice"
1 +(2 + " blind mice"); // => "12 blind mice"
第一行没有圆括号,“+”运算符具有从左至右的结合性,因此两个数字首先进行加法计算,计算结果和字符串进行连接。在第二行中,圆括号改变了运算顺序:数字2和字符串连接,生成一个新字符串,然后数字1和这个新字符串再次连接,生成了最终结果。
二元减法(-)
当“-”用做二元运算符时,它会根据需要把操作数转换为数字,然后再进行减法运算。
1-0 // => 1: 减法
'1'-0 => 1: 字符串转为数字后进行减法运算
'1'-'0' => 1: 字符串转为数字后进行减法运算
递增(++)
需要注意的是,“++”运算符从不进行字符串连接操作,它总是会将操作数转换为数字并增1。表达式++x并不总和x=x+1完全一样。
var x='1';
var y=x+1; //y的值是‘11’
var z=++x;//z的值是2
typeof(y));// "string"
typeof(z));//"number"
总结:
JavaScript中的某些运算符会做隐式的类型转换,有时用于类型转换。一元运算符“+”,“-”,“++”,二元元算法“-”都会把操作数隐式的转换为数字,二元运算符“+”比较特殊,当有操作数是字符串,它将会把另外一个操作数转换为字符串。
x + "" // 等价于String(x)
+x // 等价于Number(x)
JS-隐士类型转换‘1’+1、‘1’-1、++‘1’为什么不一样?的更多相关文章
- JS 数据类型转换
JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...
- JS之类型转换
一.显示类型转换 1.Boolean() (1).undefined/null/‘’ ==> false (2).任何对象(包括例如var obj = {} ) ==> true ( ...
- JS数据类型转换
JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...
- js值类型转换(boolean/String/number),js运算符,if条件,循环结构,函数,三种弹出框
js值类型转换 number | string | boolean boolean类型转换 num = 0; var b1 = Boolean(num); console.log(b1) 转化为数字类 ...
- js 自动类型转换
js自动类型转换 1.==符号在判断左右两边数据是否相等时,如果数据类型一致,直接比较值即可 2.==符号左右数据类型不一致时,如果两方数据为布尔型.数值型.字符串型时,不为数字的那一方自动调用Num ...
- JS的类型转换,强制转换和隐式转换
JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...
- JS的类型转换
首先我们要知道,在 JS 中类型转换只有三种情况,分别是: 转换为布尔值 转换为数字 转换为字符串 我们先来看一个类型转换表格 转Boolean 在条件判断时,除了 undefined, null, ...
- js笔记——js数据类型转换
以下内容摘录自阮一峰的<语法概述 -- JavaScript 标准参考教程(alpha)>章节『数据类型转换』,以做备忘.更多内容请查看原文. JavaScript是一种动态类型语言,变量 ...
- JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换
1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型 ...
- {}+[] = ? 和 []+{} = ? 浅谈JS数据类型转换
参加公司技术嘉年华第一季(前端.服务端)的间隙,陈导问了我一个问题:{}+[] 和 []+{}两个表达式的值分别是什么?根据我的理解我觉得结果应该都是"[object Object]&quo ...
随机推荐
- App里面如何正确显示用户头像
1.说明,一般用户头像在上传的时候都会处理为正方形,如果没有处理该怎么正确显示用户头像呢?解决方案:用css强制 在线地址移动端:戳这里 <div class="main-meimg& ...
- Tomcat 8默认工具manager管理页面访问配置
Tomcat 8默认工具manager管理页面访问配置 1. 分配相关的角色权限 需要配置的配置文件是${catalina.home}/conf/tomcat-users.xml先给Tomcat访问相 ...
- 启动MySQL报错
安装完MySQL,启动MySQL报错,报错信息如下:Starting MySQL....The server quit without updating PID file (/data/mysqlda ...
- SQLServer 2005Windows验证如何改为混合模式验证
SQL Server 2005 Windows验证如何改为混合模式验证[摘] by:授客 QQ:1033553122 默认情况下,SQL Server 2005 Express是采用集成的Window ...
- 安卓开发_关于WebView加载页面空白问题
依据我自己的测试,发现有时候用APP打开网页的时候,有的网页加载成功之前需要很久,有的一下就出来了(比如百度) 当加载时间过长的情况下,这时候显示的是空白界面,其实不是代码问题,只是要打开的这个网页太 ...
- python写一个双色球彩票计算器
首先声明,赌博一定不是什么好事,也完全没有意义,不要指望用彩票发财.之所以写这个,其实是用来练手的,可以参考这个来预测一些其他的东西,意在抛砖引玉. 啰嗦完了,马上开始,先上伪代码 打开网址 读取内容 ...
- [MapReduce_3] MapReduce 程序运行流程解析
0. 说明 Word Count 程序运行流程解析 && MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图
- Spring系列(1)--IOC 和 DI
IOC 和 DI IOC 原理 xml 配置文件配置 bean dom4j 读取配置文件 工厂设计模式 反射机制创建对象 applicationContext.xml 配置文件,该配置文件名可自定义: ...
- Mysql基础之 基础知识解释
Mysql基础知识 RDBMS:关系型数据库管理系统.是将数据组织成相关的行和列的系统 存储过程:是存储在数据库中的一段声明性语句.触发器.java.php等都可以调用其存储过程.早期的mysql版本 ...
- tcpdump抓包具体分析
Tcpdump抓包分析过程 一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x ...