JavaScript 之 特殊运算符

一、=== 下面的规则用来判断两个值是否===相等:

首先,== equality 等同,=== identity 恒等。
      ==, 两边值类型不同的时候,要先进行类型转换,再比较。
      ===,不做类型转换,类型不同的一定不等。

1、如果类型不同,就[不相等]
2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断)
3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。
4、如果两个值都是true,或者都是false,那么[相等]。
5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。
6、如果两个值都是null,或者都是undefined,那么[相等]。

二、==

根据以下规则:

1、如果两个值类型相同,进行 === 比较。
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:

a、如果一个是null、一个是undefined,那么[相等]。
b、如果一个是字符串,一个是数值,把 " 字符串转换成数值 "再进行比较。
c、如果任一值是 true,把它转换成" 1 "再比较;如果任一值是 false,把它转换成" 0 "再比较。
d、如果一个是对象,另一个是数值或字符串,把对象转换成" 基础类型的值再比较 "。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,在此不做说明。
e、任何其他组合,都[不相等]。

举例:
"1" == true 类型不等,true会先转换成数值 1,现在变成 "1" == 1,再把"1"转换成 1,比较 1 == 1, 相等。

= 赋值运算符
== 等于
=== 严格等于
例: var a = 3; var b = "3";

a==b 返回 true
a===b 返回 false

因为a,b的类型不一样 ,===用来进行严格的比较判断

      简而言之就是“==”只要求值相等。“===”要求值和类型都相等。

三、&& 运算符

从对其它语言的了解,表达的意思就是把多个逻辑条件连接起来确定真假,如果连接的条件有一个为假,则返回假。 其实JS里的&&运算符也是这个意思。在JS里,任何类型的值都可以转换成逻辑布尔值 如:

对象               →   true
非空字符串      →   true
非0数字          →   true
true               →   true
  
""                   →  false
null                →  false
undefined       →  false
false              →  false
NaN               →  false
0                   →  false

例如:
 var a1 =   "aa";
 var a2 =   "bb";
 var a3 =   "cc";
 var aa = a1 && a2 && a3;   //3个条件连接起来判断真假,都为真 则返回最后一个值。
 alert(aa);  //返回a3

下面解析
(1)如果3个条件都为真, 则返回第三个值。
(2)如果3个条件都为假, 则返回第一个值, 由于短路算法, 从左到右发现第一个值为假,第二个值和第三个值都会被忽略。
(3)如果只是其中一个为假, 则返回假的那个值, 根据短路算法,后面的值被忽略.

上面的逻辑其实表达的意思如下:
  if(!a1)        a1没有意义 返回a1
      alert(a1);
  else if(!a2)   a2也没有意义 返回a2
      alert(a2);
  else if(!a3)  a3也没有意义 返回a3
      alert(a3);
  else
       alert(a3); //都有意义 返回 最后一个a3

四、|| 运算符

理解了前面的&&运算符,它表达的意思是,如果要使表达式有意义,从左到右只要发现有一个有意义则整个表达式都有意义,并返回这个有意义的值,如果都是没意义的值,则返回最后那个值。

var a1 =   null;
var a2 =   NaN;
var a3 =  undefined;
var aa = a1 || a2 || a3;
alert(aa); //返回" undefined "

下面解析
(1)如果其中3个条件都是真,则返回第一个为真的值, 根据短路算法, 第二个值和第三个值都会被忽略,因为第一个值已经决定了结果。

(2)如果只有其中一个为真, 则返回为真的那个值. 后面的条件都将忽略。

(3)如果都为假,返回最后一个假的值。
var aa = a1 && a2 && a3;
如果用if来表示如下:
if(a1)
   alert(a1);
else
{
  if(a2)
  {
    alert(a2);
  }
 else
    alert(a3);
}

JS中经常用|| 运算符来做逻辑判断。 如:

var a = false;
var b = [1,2,3];
var aa = a || b   //如果第一个值没有意义就返回第二个, 否则返回第一个

表达的意思如下:

if(a == null)
 alert(b);
else
 alert(a);

其等价于c#里的:
string a == null ? b : a

再区别一下如下的代码:
var a = undefined;
var b =[1,2,3];

var c = (a==undefined) &&  b   //如果a没有初始化,则用b来代替
var d = a || b                               // 如果a等于false,则用b来代替
alert(c); //返回1,2,3
alert(d); //返回1,2,3

      最后总结一下, && 和|| 运算符的区别:

(1)两者都是计算连接条件的真假, 最后来确定值, 都是从false开始测试的。
(2)对于 &&  如果第一个值是false 则整个表达式都是false 并返回第一个值,后面的条件都将忽略。
(3)对于 ||  如果第一个值是false 则它会继续看后面的条件是否为真,直到找到真值就立即返回,如果到最后也没找到真值,则返回最后一个值。

时间: 2024-10-05 15:53:22

JavaScript 之 特殊运算符的相关文章

JavaScript逻辑and运算符详解

一.AND详解: 在JavaScript中,逻辑 AND 运算符用双和号(&&)表示. 需要说明的是:逻辑AND运算的运算数可以是任何类型的,不止是Boolean值,如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值. 逻辑AND运算符的运算行为如下: 如果一个运算数是对象,另一个是 Boolean 值,返回该对象. 如果两个运算数都是对象,返回第二个对象. 如果某个运算数是 null,返回 null. 如果某个运算数是 NaN,返回 NaN. 如果某个

JavaScript中“typeof”运算符与“instanceof”运算符的差异

在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了.“typeof”是一元运算符,其后直接跟需要进行类型判断的数据:而“instanceof”是二元运算符,其左侧是需要判断的数据,右侧是用于比较的类型. //typeof是一元运算符: var amount = 108; console.log(typeof amout);//控制台输出“numbe

javascript的void运算符

javascript的void运算符:void运算符对任何值都会返回undefined.此运算符一般用来避免输出不应该出现的值.实例代码: var a; a=2; document.write(void(a)); 输出结果:undefined . <a href="javascript:void(window.open('about:blank'))">点击打开新窗口</a> 以上代码在网页中经常用到.window.open()方法会返回新窗口对象的引用,并且该

JavaScript中的运算符

JavaScript中的运算符,JavaScript是具有全范围的运算符,包括算术.逻辑.位.赋值以及其他某些运算符. 计算逻辑位运算赋值杂项 描述符号描述符号描述符号描述符号描述符号 负值-逻辑非!按位取反~赋值=删除deletewww.mlybyby.com 递增++小于<按位左移<<运算赋值oP=typeof 运算符typeof 递减--大于>按位右移>>voidvoid 乘法*小于等于<=无符号右移>>>instanceofinstanc

JavaScript学习系列7 -- JavaScript中的运算符

今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或者方法的引用, 举个例子如下 var myObj = new Object(); // 这一句和 var myobj = new Object(); 等价 myObj.name = "Luke"; alert(myObj.name); // 输出 "Luke" dele

JavaScript基础——变量-运算符-流程控制语句

JavaScript组成 一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: ECMAScript:描述了该语言的语法和基本对象: 文档对象模型(Document Object Model,简称DOM)):描述处理网页内容的方法和接口: 浏览器对象模型(Browser Object Model,简称BOM)):描述与浏览器进行交互的方法和接口. 变量 变量类型:object string function boolean undefined null number JavaS

[2016-02-09][javascript][表达式与运算符]

算术运算符 + - * / % ++ -- ++ -- 运算和C++的类似,也有前缀和后缀形式 不过,javascript中浮点类型等也支持++ --运算,效果 就是自增(减) 1, bool 类型,++ -- 运算完之和,变量变成 number 非数值类型,实际上就是先隐式转换成 数值类型,在进行自增自减运算 注意:后缀++,在自增之前,类型已经转换 1 2 3 4 var b = true; document.write("</br>"); document.write

JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)

1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 alert(a.x) //undefined;这里还是存在“东西”的 就如: var b=[1,2,3]; delete b[0]; b.length //3:还是3,虽然上面已经删除了b[0] 2.void运算符 void忽略操作的值,因此在操作数具有辅助作用的时候使用void来让程序更具语义 例子:

JavaScript权威设计--JavaScript表达式与运算符(简要学习笔记五)

1.3种原始表达式 1.直接量:    1.23    //数字直接量 “hello”    //字符串直接量 ... 2.保留字构成的原始表达式: true    //返回布尔值:真 false    //假 null    //返回一个值:空 3.变量: i    //返回变量i的值 sum    //返回sum的值 2.对象初始化表达式 var p={ x:2.3, y:-1.2 } //一个拥有两个属性成员的对象 对象直接量也可以嵌套: var rea={ upp:{ x:2, y:2

Javascript进阶(1)---运算符

Javascript运算符 1.关于Javascript中的“===”与“==”的比较 简而言之:“===”要求类型与数值都相等. “==”只要求数值相等 var num_str=“1”; // num_str为字符型变量 num_str == 1;//结果为true num_str === 1;//值相同,但是类型不相同.结果为false 1===1 ;//值与类型都相同,返回true 1===2 ://类型同,值不同,返回false 2.关于“||”与“&&”逻辑符       设有