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 ...
随机推荐
- Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Appium初识
一. Appium工作原理 基本工作流程如下: Appium提供了一套web服务,Appium起一个Server(4723端口),用于与脚本client通信. server接收web driver(即 ...
- Nginx Linux安装与部署
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...
- JMeter乱码常见的解决方案
方法一.直接将JMeter中http请求中Content encoding改为utf-8 方法二.编辑JMeter安装目录:apache-jmeter-3.2\bin中的jmeter.properti ...
- 关于解决JetBrains 激活问题
今天升级了下JetBrains 的一系列产品,安装后打开发现以前的激活失效了. 在网上看到网友们各类屏蔽和寻找服务器,尝试了下都不太方便. 最后去rover的个人博客看了下,很给力,总能跟上JetBr ...
- Linq2DB之研究和探索
1,对linq2db使用看法 最近在研究linq2db,用起来还不错,性能还不错的.之前也在博客园有些网友说用ado.net和depper写SQL语句,性能还要高.有时候牺牲点性能,为了提高开发效率, ...
- 薛兆丰吴军何帆曾鸣万维刚李笑来罗永浩等得到APP专栏作者的书23本
最近看了何帆的<大局观>,是他在得到APP的专栏文章的精选.顺便整理以下最近两三年内看过的得到APP其他专栏与课程作者的得到精选文集和他们写过的其他的书共23本. 薛兆丰 4星|<薛 ...
- 解决 Mac 突然没有声音
前言 偶尔早上上班时发现Mac突然没有声音了,不明所以.虽然重启也可以,但是也不免太麻烦了.也许是人品不太好,遇到过多次这种情况,就在快要砸了的自己mac的时候,脑中灵光一闪,难道这是因为核心音频守护 ...
- Alpha冲刺! Day5 - 砍柴
Alpha冲刺! Day5 - 砍柴 今日已完成 晨瑶:review了业务逻辑表格,确定了工具类具体函数有哪些:讨论确定了记录的存储方式为HTML. 昭锡:继续学习Gson,并写出json基本操作的D ...
- 解决LINUX 只读文件系统的问题
mount -o rw,remount /dev/mapper/vg_nips-lv_root /