JavaScript高级程序设计第三章之操作符
来源:互联网 发布:linux 中telnet命令 编辑:程序博客网 时间:2024/06/16 08:42
ECMA中有五种简单的数据类型(基本数据类型):
Undefined、Null、Boolean、Number和String。
各种与基本数据类型有关的操作符:
一元操作符(i++,++i,i–,–i)
在应用于一个包含有数字字符的字符串时,现将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。
在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。
- 在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变成数值变量
- 在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变成数值变量
- 在应用于浮点数值时,执行加减1的操作。
在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量。
var s1 = "2"; var s2 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1++; //value becomes numeric 3 s2++; //value becomes NaN b++; //value becomes numeric 1 f--; //value becomes 0.10000000000000009 o--; //value becomes numeric ?
位操作符存储负数的二进制码采用的格式是二进制补码,1求这个数绝对值的二进制码2.求绝对值二进制码的二进制反码3.得到的二进制反码加1.
按位非(NOT):按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。
var num1=25; var num2=~num1; alert (num2); //按位非操作的本质:操作数的负值减1.
按位与(AND):按位与操作符由一个和号字符(&)表示,它有两个操作符数。
var result= 5 & 3;alert (result);
按位或(OR):按位或操作符由一个(|)表示。
var result= 5 | 3;alert (result);
按位异或:按位异或操作符由一个插入符号(^)表示。
var result= 5^ 3;alert (result); //26
左移、右移、无符号左移、无符号右移
布尔操作符(布尔操作符一共有三个:非、与、或)逻辑非,由一个(!)叹号表示。
如果操作数是一个对象,返回false;
如果操作数是一个空字符串,返回true;如果操作数是一个非空字符串,返回false
- 如果操作数是数值0,返回true,如果操作数是个任意非0数值(包括Infinity),返回false. 如果操作数是null,返回true
如果操作数是NaN,返回true 如果操作数是undefined,返回true
alert(!false); //true alert(!"blue"); //false alert(!0); //true alert(!NaN); //true alert(!""); //true alert(!12345); //false
同时使用两个逻辑非操作符,相当于模拟一个Boolean()函数
2.逻辑与(&&)
如果第一个操作数是对象,则返回第二个操作数;
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。
乘性操作符(三种乘性操作符:乘法、除法和求模)-1.乘法
如果操作数都是数值,执行常规的乘法计算,数值超出范围返回Infinity或-Infinity
- 如果有一个操作数是NaN,则结果是NaN;
- 如果是一个Infinity和0相乘,则结果是NaN;
- 如果是一个Infinity和非0数值相乘,结果是Infinity或-Infinity
- 如果是Infinity和Infinity相乘,结果是Infinity
如果有一个操作数不是数值,则在后台调用Number(),将其转换
-2.除法
如果操作数都是数值,执行常规的乘法计算,数值超出范围返回Infinity或-Infinity
- 如果有一个操作数是NaN,则结果是NaN; 如果是Infinity被Infinity整除,则结果是NaN;
- 如果是零被零整除,则结果是NaN; 如果是非零的有限数被零除。则结果是Infinity或-Infinity;
如果是Infinity被任何非零数值除,则结果是Infinity或-Infinity
3.求模
如果操作数都是数值,执行常规的计算
- 如果被除数是无穷大值而除数是有限大数值,结果是NaN;
- 如果被除数是有限大数值,除数是0,则结果是NaN
- 如果Infinity和Infinity除,结果是NaN;
- 如果被除数是有限大数值而除数是无穷大数值,结果是被除数
如果有一个操作数不是数值,则在后台调用Number(),将其转换
加性操作符
1.加法如果有一个操作数是NaN,则结果是NaN;
- 如果是Infinity加Infinity,结果是Infinity;
- 如果是-Infinity加-Infinity,结果是-Infinity;
- 如果是Infinity加-Infinity,则结果是NaN;
- 如果是+0加+0,结果是+0;如果是-0加-0,结果是-0;如果是+0加-0,结果是+0
- 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来
- 如果有只有一个操作数是字符串,则将另一个操作数转换成字符串,然后再将两个字符串拼接起来
如果有一个操作数是对象、数值、或布尔值,则调用他们的toString()方法取得相应的字符串值,再应用前面的字符串规则。对于undefined和null,则分别调用toString(),取得”undefined”、”null”。
var result1 = 5 + 5; //two numbersalert(result1); //10var result2 = 5 + "5"; //a number and a string alert(result2); //"55"
注意一个例子:
var num1 = 5; var num2 = 10; var message = "The sum of 5 and 10 is " + num1 + num2; alert(message); //"The sum of 5 and 10 is 510"
每个加法操作都是独立执行的 ,用一个字符串去加一个数字,得到一个字符串,再去加数字,得到的还是字符串,所以如果想得到15,就要适当的运用圆括号
var num1 = 5; var num2 = 10; var message = "The sum of 5 and 10 is " + (num1 + num2); alert(message); //"The sum of 5 and 10 is 15"
2.减法
- 如果有一个操作数是NaN,则结果是NaN;
- 如果是Infinity减Infinity,结果是NaN;
- 如果是-Infinity减-Infinity,结果是NaN;
- 如果是Infinity减-Infinity,则结果是Infinity;
- 如果是+0减+0,结果是+0;如果是-0减-0,结果是+0;如果是+0减-0,结果是+0
- 如果有一个操作数是字符串、布尔值、null或undefined,则现在后台调用Number()函数将其转换为数值,然后再根据前面的规则执行减法计算,如果转换的结果是NaN,则减法的结果是NaN;
如有一个操作数是对象,则调用对象的valueOf()方法取得表示该对象的数值。如有NaN,则减法的结果就是NaN。如对象没有valueOf()方法,则调用其toString()方法并将得到的字符串转换为数值。
var result1 = 5 - true; //4 because true is converted to 1 var result2 = NaN - 1; //NaNvar result3 = 5 - 3; //2var result4 = 5 - ""; //5 because "" is converted to 0 var result5 = 5 - "2"; //3 because "2" is converted to 2var result6 = 5 - null; //5 because null is converted to 0
关系操作符- 如果都是数值,则数值间进行比较
如果操作数都是字符串,则比较两个字符串之间对应的字符编码值
var result="23"<"3" //true
如果一个是数值,则将另一个转换为数值,进行比较
var result="23"<3 //false 因为"23"会转换为数字23,再与3比较
如有一个操作数是对象,则调用这个对象的valueOf()方法,用前面规则比较,如果没有valueOf(),用toString()
如果操作符是布尔值,先转换为数值,再比较。
var result1="a"<3 //falsevar result2="a">=3 //false
是因为字母”a”不能转换为合理的数值,于是就被转换为了NaN,然而在于NaN进行比较时,操作的结果都返回了false.
相等操作符(相等操作符”==”:先转换再比较;全等操作符”===”只比较不转换)null和undefined是相等的
- 要比较相等性之前null和undefined不能被转换成任何值
- 如有一个操作数是NaN,则相等操作符返回false,则不相等操作返回true。即使两个操作数都是NaN,相等操作符也返回false,因为NaN不等于NaN
如果两个操作数都是对象,则比较他们是不是同一个对象、如果指向同一个对象,则相等操作符返回true,否则返回false.
条件操作符
逗号操作符
使用逗号操作符可以在一条语句中执行多个操作var num1=1,num2=2,num3=3 var num=(5,3,4,2,1,0) // num值为0
关于toString:
/数组var array = ["CodePlayer", true, 12, -5];document.writeln( array.toString() ); // CodePlayer,true,12,-5// 日期var date = new Date(2013, 7, 18, 23, 11, 59, 230);document.writeln( date.toString() ); // Sun Aug 18 2013 23:11:59 GMT+0800 (中国标准时间)// 日期2var date2 = new Date(1099, 7, 18, 23, 11, 59, 230);document.writeln( date2.toString() ); // Fri Aug 18 1099 23:11:59 GMT+0800 (中国标准时间)// 数字var num = 15.26540;document.writeln( num.toString() ); // 15.2654// 布尔var bool = true;document.writeln( bool.toString() ); // true// Objectvar obj = {name: "张三", age: 18};document.writeln( obj.toString() ); // [object Object]// HTML DOM 节点var eles = document.getElementsByTagName("body");document.writeln( eles.toString() ); // [object NodeList]document.writeln( eles[0].toString() ); // [object HTMLBodyElement]
关于valueOf():
valueOf 的用法
- JavaScript高级程序设计第三章之操作符
- javascript高级程序设计之相等操作符
- JavaScript高级程序设计第三章——操作符和语句
- JavaScript高级程序设计 第三章 javascript基本概念
- 《 JavaScript高级程序设计》第三章 对象基础
- JavaScript高级程序设计 第三章 --- 基本概念
- Javascript高级程序设计第三章知识总结
- JavaScript高级程序设计----读书笔记,第三章
- javascript高级程序设计第三版 第三章 基本概念
- javascript高级程序设计笔记--js操作符
- 《JavaScript高级程序设计》读书笔记--2-操作符
- javascript之高级程序设计
- JavaScript 高级程序设计——第三章基本概念 学习笔记
- 读书笔记 JavaScript 高级程序设计(第三版)-- 第1章
- 读书笔记 JavaScript 高级程序设计(第三版)-- 第2章
- 读书笔记 JavaScript高级程序设计 第三章 基本概念-语法
- 读书笔记 JavaScript高级程序设计 第三章 基本概念-数据类型
- JavaScript高级程序设计(第3版)第三章读书笔记
- 基于图学习的图像降噪(一)——初识图
- 习题
- spring 5.0 从入门到放弃 01
- mysql存储过程之循环结构邂逅leave
- HDU 1164
- JavaScript高级程序设计第三章之操作符
- leetcode4
- Ubuntu jdk、eclipse的安装和从github导入project
- html&css--------其他标记(11/1)
- SSL2522 2014年汕头市选拔赛普级组 约数(线性筛素数)
- HDU
- Elastic Job入门
- nginx源码阅读(五).worker进程的工作循环
- 在linux下学习收获总结