JavaScript高级程序设计(八):基本概念--操作符

  操作符包括:算术操作符、位操作符、关系操作符和相等操作符。

  一元操作符

  1、只能操作一个值得操作符,即递增和递减操作符;

  2、递增(++)和递减(--)操作符包括:前置型和后置型。前置型位于要操作的变量之前;后置型位于要操作的变量之后。

  3、执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的;执行后置递增递减操作时,是在包含它们的语句执行后才执行的。eg:

var age=22;
//前置递减
var ageOther=--age+2;   //返回23(先执行递减,再执行语句)

//后置递减
var ageAf=age-- + 2;  //返回24 (先执行语句,再执行递减)

  4、递增和递减操作同样可以适用于字符串、布尔和对象,不过要先转换成数值,然后再进行其操作。

var s1=‘1‘;
var s2=‘z‘;
var f=‘1.1‘;
var b=‘true‘;
var o={
   valueOf:function(){
       return -1;
    }
}

//执行递增递减操作
++s1;     //2
++s2;   //NaN(不包含数字的,转换数值返回NaN)
--f;   //0.10000000000000009;  (浮点类型产生的误差)
b++;  //2
o++;//0(对象,调用valueOf()方法,然后转换为数值进行操作)

  5、一元加减操作符:将加号(减号)放到数值前面,对数值不会产生任何影响【同样适用于字符串、布尔和对象,规则同理递增和递减操作】。eg:

var num=90;
num=+num;  //90

//但是如果是减号,会变成相反数
var num2=33;
num2=-num2;  //-33

  6、位操作符:ECMAScript中所有数值都以IEEE-754 64位格式存储,但位操作符并不是直接操作64位的值。而是先将64位的值转换为32位,执行操作,最后再转回64位。

  7、位操作符运算包括:按位非(NOT ~)、按位与(&)【计算规则:同为1才得1】、按位或(|)【计算规则:有1就得1】、按位异或(^)【计算规则:不同值才得1】。

  8、布尔操作符:逻辑非(not) 逻辑与(and) 逻辑或(or)3个操作。

  9、逻辑非(!)可以用于任何数据类型,且会返回一个布尔值。逻辑非操作符遵循的规则:

    1)null、undefined、NaN、空字符串、0都会返回true;

    2)对于非空字符串、对象、非0数值(包括infinity无穷)返回false

  总结:可以通过逻辑非,判断一个变量是否存在。

  10:逻辑与(&&):有两个操作数。例如:var rs=true && false;  //false

  11、逻辑与操作符适用于任何数据类型,其遵循的规则:

    1)若第一个操作数是对象,则返回第二个操作数;

    2)若第二操作数是对象,则只有在第一个操作符是true的情况下才会返回该对象;

    3)若两个操作符都是对象,则返回第二个操作数;

    4)若其中有一个操作数是null、undefined、NaN,则返回这些值。

  12、逻辑与(&&)操作:短路操作,即第一个操作数能够决定结果,那么就不会再对第二个操作数求值了。若第一个操作数的值是false,那么第二个操作将不再执行。

eg:

var f=true;
var rs=(f && s);  //catch 到错误。s为定义变量
console.log(rs);    //这一语句不会执行

var f=false;
var rs=(f && s);
console.log(rs);  //返回false,s将不再执行

  13、逻辑或操作符与逻辑与相似,返回值不一定是布尔值,遵循的规则:

    1)若第一个操作数是对象,则返回第一个操作数;

    2)若两个操作数都是对象,则返回第一个操作数;

    3)若第一个操作数求值结果是false,则返回第二个操作数

    4)若其中有一个操作数是null、undefined、NaN,则返回这些值。

  14、乘性操作符:乘法、除法、求模(余数)。对于非数值的操作符,会用Number()进行转换,即非数值字符串==》0,布尔值==》0和1。

  15、乘性操作符特殊操作遵循的规则:

    1)如果乘积超过ECMASpcript的范围,则会返回Infinity或者-Infinity;

    2)若一个操作数是NaN,则返回NaN;

    3)Infinity与0相乘,则返回NaN;

    4)Infinity与非0数值相乘,返回Infinity或者-infinity,符号取决于非0数值;

    5)Infinity与Infinity相乘,则返回Infinity。

    6)数值与一个非数值相乘,则先调用Number()进行转换,然后按照以上规则进行操作。

  16、除法类似于乘法,不同的规则:

    1)Infinity除Infinity,返回NaN;

    2)非0数值除以0,则返回Infinity或者-Infinity,符号取决于非0数值的符号;

    3)非0数值除以Infinity,则返回Infinity或者-Infinity,符号取决于非0数值的符号;

  17、求模(余数 %): var rs=26 % 5;

  18、求模的处理特殊的值,遵循的规则:

    1)无穷大Infinity除以有限大的数值,返回NaN;

    2)有限大的数值除以0,返回NaN;

    3)Infinity除以Infinity,返回NaN;

    4)0除以非0的数值(包括无穷大),返回0;

    5)有限大的数值除以无穷大,返回有限大数值;eg:

var rs=10 % -Infinity;
console.log(rs);  //10

var rs=10 % Infinity;
console.log(rs);  //10

  19、加性操作符处理特殊的值:

    1)Infinity 加 -Infinity,返回NaN;

    2)+0加-0,返回+0;

    3)若一个数值和一个字符串相加,得到的是字符串的拼接;eg:

//两个字符串,拼接
var nus1=‘1‘;
var nus2=‘2‘;
console.log(nus1+nus2);  //‘12‘

//一个数值 +一个字符串
var num=1;
var s=‘2‘;
console.log(num+s);  //‘12‘

  20、减性操作符处理特殊的值:

    1)存在操作符NaN,则返回NaN;

    2)Infinity-Infinity 返回NaN;

    3)-Infinity减去-Infinity,返回NaN;

    4)Infinity减去-Infinity,返回Infinity;

    5)-infinity减去infinity,返回-infinity;

    6)非数值型的减,先调用Number()转换,然后再执行减操作;eg:

var rs1=5-true;  //4(true被转换为了1)
var rs2=NaN-1; //NaN(有NaN存在)
var rs3=5-3;  //2
var rs4=5-‘‘; //5 (‘‘ 转换后为0)
var rs5=5-null; //5 (null 转换后为0)
var rs6=5-‘2‘;  //3

  21、关系操作符:当关系操作符的操作数是非数值时,也要进行数据转换或完成某些奇怪的操作。eg:

    1) 若两个操作数是字符串时,则比较两个字符串对应的字符编码;【两个数值字符串比较也是如此】eg:

var rs="Bird"<‘apple‘;  //true (原因:字符‘B’的编码是66,字符‘a’的编码是97,所以是小于)

var rs2=‘Bird‘.toLowerCase()<‘apple‘.toLowerCase();  //false (原因:当都转换为小写时候,字符‘b’的编码是98,字符‘a’的编码是97,所以是大于) 

//两个数值字符串比较var rs3=‘23‘<‘3‘;   //true(字符‘2‘确实小于‘3’)

//数值与字符串var rs4=‘23‘<3;  //false(字符‘23’会先转换为数值23,再进行比较,所以是大于)

    2)若数值与一个非数值进行比较时,都应该先转换成数值,再进行比较。

    3)任何操作数与NaN比较,都将返回false。

  22、相等操作符:有两种情况:相等(==)和不相等(!=):先转换成同类型在比较;全等(===)和全不等(!==):不转换直接比较【数据类型也会进行比较】。

  23、相等操作遵循的规则:

    1)null和undefined是相等的。

    2)若两个操作数都是对象,则比较两个对象是不是同一个对象。若指向同一个对象则返回true,否则false。

    3)任何操作数与NaN都不相等。                          eg:

null==undefined;  //true              NaN !=NaN;        //true
NaN==‘NaN‘;       //false                NaN==NaN;         //false
‘5‘==5;          //true                              true==1;         //true
false==0;        //true
false==1;        //false

  24、全等和全不等:数据类型也要相等;eg:

var rs=(‘55‘===55);  //false(数据类型不同:字符串  数值)
var rs2=(55===55);  //true

var rs3=(null===undefined);  //false(null和undefined数据类型不同)

  25、条件操作符:语法:var tt=boolean_expression ? true_value : false_value; eg:

var max=(num1 >num2)?num1 : num2;  //获得两个值中最大值

  26、赋值操作符(=):在等号前面加上乘性操作符、加性操作符,就可以完成复合操作符。eg:

var num=10;
num=num+10;

//可以简写成复合形式:
 var num=10;
num+=10;

  27、逗号操作符:一条语句中可以执行多个操作,主要通过逗号来完成的。

    1)如声明多个变量:eg:  var num=1, s=‘3‘,flag=false;

    2)可以用来赋值。eg:   var num=(1,2,5,8,9,6,0);  //num的值为0(因为0是表达式最后一个值,所以num的值就是0)

 

时间: 2024-12-24 11:46:26

JavaScript高级程序设计(八):基本概念--操作符的相关文章

JavaScript 高级程序设计 01-基本概念

一.JavaScript组成 1.一个完成JavaScript是由ECMAScript.DOM.BOM三部分组成的. ECMAScript:提供核心语言功能--语法.类型.语句.关键字.保留字.操作符.对象: DOM:文档对象模型--提供访问和操作网页内容的方法和接口: BOM:浏览器对象模型--提供与浏览器交互的方法和接口 二.在页面中引用js 1.在网页中引用js有两种方法--嵌入和外部 <!DOCTYPE html> <html> <head> <title

《JavaScript高级程序设计》读书笔记 ---操作符一

一元操作符只能操作一个值的操作符叫做一元操作符.一元操作符是ECMAScript 中最简单的操作符. 1. 递增和递减操作符递增和递减操作符直接借鉴自C,而且各有两个版本:前置型和后置型.顾名思义,前置型应该位于要操作的变量之前,而后置型则应该位于要操作的变量之后.因此,在使用前置递增操作符给一个数值加1 时,要把两个加号(++)放在这个数值变量前面,如下所示: var age = 29;++age; 在这个例子中,前置递增操作符把age 的值变成了30(为29 加上了1).实际上,执行这个前置

JavaScript高级程序设计-(2)基础概念

for-in 语句 for-in 语句是一种迭代语句,用来枚举对象属性,语法:for (property in expression) statement实例:for(var propName in window){ document.write(propName);} 理解参数 EcmaScript函数参数不介意传递进来多少个参数,定义的函数接收2个参数,但是调用时未必传递2个参数,可多可少在函数体内,通过arguments对象访问这个参数数组,如下所述: 没有重载 ECMAScript函数不

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

《JavaScript高级程序设计》学习笔记 基本概念

系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作,由Netscape主导开发,那时候微软的IE还不能独领风骚.最初叫做LiveScript,当时媒体热炒Java,于是改名为JavaScript.JavaScript和ECMAScript通常指同一门语言,但是,JavaScript是ECMA-262标准的实现和扩展.E

《Javascript高级程序设计》阅读记录(二):第四章

这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅读 另一个目的是,Javascript高级程序设计这本书内容很多也很厚,希望其他没有时间的人可以通过看这系列摘录,就可以大体学到书里面的核心内容. 绿色背景的内容是我认为比较值得注意的原著内容.

《JavaScript高级程序设计》学习笔记(5)——面向对象编程

欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.前面提到过,ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. ECMA-262把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数.