JavaScript学习系列7 -- JavaScript中的运算符
今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符
JavaScript中的一元运算符有以下几种
1. delete
delete 运算符主要用于删除对以前定义的对象属性或者方法的引用, 举个例子如下
var myObj = new Object(); // 这一句和 var myobj = new Object(); 等价
myObj.name = "Luke";
alert(myObj.name); // 输出 "Luke"
delete myObj.name;
alert(myObj.name); //输出 "undefined"
上面的例子中,通过 delete myObj.name 语句, 删除了 myObj 的name属性,这意味着强制解除对它的引用, 将其设置为 undefined (相当于 创建的未初始化的变量的值)
注意: delete 运算符不能删除开发者没有定义的属性和方法. 比如 下面的代码将引发错误
delete myObj.toString;
即使 toString是有效的方法名, 这行代码也会引发错误. 因为toString不是开发者定义的方法,而是原始的ECMAScript的方法
2. 一元加法 和 一元减法
ECMAScript 中的一元加法 和 一元减法 和我们国内数学中的用法相同
可以总结如下
一元加法 对数字没有影响,对于字符串会把字符串转化为数字
一元减法 对数字进行求负, 对于字符串会把字符串转化为数字并且求负
一元加法
一元加法 对数字完全没有任何影响, 但是在对非数值应用一元加运算符时,会调用Number()转型函数对这个值进行转换
所以,如果你对一个数字字符串(eg: "1234")应用一元加运算符,会把它转化为真正的数字 1234
var iNumber = 5;
iNumber = +iNumber;
alert(iNumber); //输出 5
var str = "5";
alert(typeof str); //输出 "string"
var iNumber = +str;
alert(typeof iNumber); //输出 "number"
var str1 = '05';
var str2 = '1.5';
var str3 = 'z';
var bValue = false;
var fValue = 1.5;
var myObj = { valueOf: function(){ return -1;
} } str1 = +str1; //输出 5
str2 = +str2; //输出 1.5
str3 = +str3; //输出 NaN
bValue = +bValue; //输出 0
fValue = +fValue; // 输出1.5
myObj = +myObj; //输出 -1
特别注意, 在new Date()前面使用一元加符号,会把日期字符串,转换为日期毫秒数
console.log(new Date()); // 输出 Wed Sep 26 2018 16:51:05 GMT+1200 (New Zealand Standard Time) console.log(+new Date()); // 输出 1537937544517
单数值数组和valueOf()返回值为数值的自定义对象会转换为数值

其他原生对象则会转换为字符串

在+运算中,和减法(-)运算中一样, undefined转换为NaN, null转换为0, false将转换为0, true将转换为1

一元减法
一元减运算符主要是用于表示负数
var num = 10;
num = -num; //输出 -10
在对非数值应用一元减运算符时,会首先调用Number()转型函数对这个值进行转换,转换为数值后,再将得到的数值转换成负数
var str1 = '05';
var str2 = '1.5';
var str3 = 'z';
var bValue = false;
var fValue = 1.5;
var myObj = { valueOf: function(){ return -1;
} } str1 = -str1; //输出 -5
str2 = -str2; //输出 -1.5
str3 = -str3; //输出 NaN
bValue = -bValue; //输出 0
fValue = -fValue; // 输出-1.5
myObj = -myObj; //输出 1

在对时间Date对象进行减法运算时,会使用Number()转换函数将时间Date对象使用ValueOf()转换为数字,再进行运算

在使用减法运算时, undefined转换为NaN, null转换为0, false将转换为0, true将转换为1

3. 递增(++) 和 递减(--)运算符
这个和C#中的用法完全相同,包括前递增(++5) 和 后递增(5++). 前递减(--5) 和 后递减 (5--)
但是有一点要注意: ++x 并不总是和 x = x+1完全一样,这是因为 ++x 会把非数字类型(比如 数字字符串)先转换为数字,再进行操作。
var x = '1';
++x; // 输出 2
但是 x+1 却会把它按照字符串连接起来, 如下
var x = '1';
x = x + 1; //输出 "11"
4. 求余(%)运算
特别注意的一点: 求余(%)运算的结果,将和第一个操作数的符号保持一致
console.log(5 % 2); //
console.log(5 % -2); // 1 注意,这里不是输出-1,和我们通常理解的不一样,求余的结果将会和第一个操作数的符号保持一致,第一个操作数5是正数,所以求余结果也是正数
console.log(-5 % 2); // -1
console.log (-5 % -2); // -1
在求余运算中,如果被除数是Infinity,或者除数是0, 则求余结果是NaN
Infinity % 0 = NaN
Infinity % Infinity =NaN
Infinity % 非0数值 = NaN
非0数值 % 0 = NaN
JavaScript学习系列7 -- JavaScript中的运算符的更多相关文章
- JavaScript学习系列5 ---ES6中的var, let 和const
我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...
- JavaScript学习系列8 - JavaScript中的关系运算符
JavaScript中有8个关系运算符,分别是 ===, !===, ==, !=, <, <=, >, >= 1. 恒等运算符 (===) ===也叫做 严格相等运算符,它要 ...
- JavaScript学习系列4 ----- JavaScript中的扩展运算符 三个点(...)
在JavaScript中, ES6开始有rest参数 和 三个点扩展运算符 (spread运算符) 我们来看看他们各自的用处 1. rest参数 rest参数的形式为 ...变量名 ...
- JavaScript学习系列6 -- JavaScript中的垃圾回收(内存释放)
程序开发中,涉及到的内存生命周期基本是一样的,分为以下三步 1. 分配需要的内存 2. 使用分配到的内存 3. 释放其内存 ----什么时候释放内存,以及需要释放哪些变量的内存, 就是垃圾回收机 ...
- JavaScript学习系列3 -- JavaScript arguments对象学习
在实际项目开发中,目前还是很少使用到JavaScript 中的arguments对象,那么它到底是干什么用的呢 arguments是JavaScript中的一个类数组对象,它代表传给一个正在执行的函数 ...
- JavaScript学习(1)之JavaScript基础
JavaScript学习(1)之JavaScript基础 由于工作原因,开发语言逐渐以JavaScript为主,所以,抽空学习了下JavaScript语法.等现阶段的工作稳定之后,陆续会分享下自己在学 ...
- JavaScript学习系列之内存模型篇
一个热爱技术的菜鸟...用点滴的积累铸就明日的达人 正文 如果真的想学好一门语言,那么一定要了解它内存模型,本篇文章就带你走进JavaScript的内存模型,由于本人才疏学浅,若有什么表述有误的地方, ...
- JavaScript学习系列博客_1_JavaScript简介
这个系列博客主要用来记录本人学习JavaScript的笔记,从0开始,即使有些知识我也是知道的.但是会经常忘记,干脆就写成博客,没事的时候翻来看一看,留下一点学习的痕迹也好.可能写博客的水平暂时不太好 ...
- Javascript学习笔记1 javascript的特点
..对于网页而言,Javascript无处不在,对于英语不好的人它简直是噩梦般的存在,但形式所逼,今天开始着手学习!希望自己能坚持下去.从什么地方着手,我的目标是从大处着眼,从应用着眼,不抠细节,反正 ...
随机推荐
- SQl Server 中登录名 、用户、角色、概念一览
转载:http://www.2cto.com/database/201306/216922.html 数据库,角色,用户,安全 登录SQL server 2008可以用w ...
- <再看TCP/IP第一卷>关于网络层及协议细节---ICMP协议几个要注意的地方
在TCP/IP协议族中,ICMP协议是一个介于网络层和传输层中间的一个协议,许多材料都会认为ICMP是网络层的一个部分,但是ICMP协议的报头是被包裹在IP协议之中的,而UDP协议又可以被ICMP协议 ...
- poj 2251 Dungeon Master-搜索进阶-暑假集训
普及一下知识 s.empty() 如果栈为空返回true,否则返回falses.size() 返回栈中元素的个数s.pop() 删除栈顶元素但不返回其值s.top() 返回栈顶的元素,但不删除该元素s ...
- retry.RetryInvocationHandler (RetryInvocationHandler.java:invoke(140)) - Exception while invoking getFileInfo of class ClientNamenodeProtocolTranslatorPB over bdata236/192.168.1.236:9000 after 3 fail
报错信息如下 -- ::, INFO [main]: retry.RetryInvocationHandler (RetryInvocationHandler.java:invoke()) - Exc ...
- Storm bolt重复消费问题解决
最近碰到一个storm的坑, 两个bolt都需要从kafkaSpout中获取数据进行各自的业务处理, bolt1的处理是幂等的, bolt2的处理是非幂等的, 上线后发现非幂等的bolt处理总是会处理 ...
- codevs1281 Xn数列
题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...
- matlab中的科学记数法变成小数形式
例如:假如rectx的形式在命令窗口显示: rectx = 1.0e+05 * 5.2294 5.2294 5.2294 5.2294 5.2294 那么,命令窗口输入vpa(rectx): ans ...
- jquery带下拉菜单和焦点图
jQuery,下拉菜单,二级菜单,索引按钮,焦点图代码,jquery带下拉菜单和焦点图是一款顶部通栏带二级下拉菜单和banner导航菜单代码. JQuery特效代码来源:http://www.huiy ...
- jmeter-接口的依赖
接口的依赖 接口2要用到接口1中返回的数据 大致思路:建立接口1和接口2,把接口1中的yangli字段传递给接口中的入参date里 步骤如下: 1.接口1 2\新建一个HTTP请求,命名为老黄历接口2 ...
- js string.format 方法
String.prototype.format = function(args) { var result = this; if (arguments.length > 0) { if (arg ...