JavaScript中的运算符种类及其规则介绍

JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等。这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScript中的运算符。

  一、JavaScript运算符的种类

  1、算术运算符:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --

  2、等同全同运算符:== 、 ===、 !== 、 !===

  3、比较运算符:< 、 > 、 <= 、 >=

  4、字符串运算符:< 、 > 、 <= 、 >= 、 = 、 +

  5、逻辑运算符:&& 、 ||、 !、

  6、赋值运算符:=、 +=、 *=、 -=、 /=

  二、JavaScript运算符的规则

  1、算术运算符规则

  “+”:可以进行“加法”与“连接”运算;如果2个运算符中的一个是字符串,javascript就将另一个转换成字符串,然后将2个运算数连接起来。

  “+”:如果一个运算数是对象,javascript就会将对象转换成数字做加法运算或者字符串做连接运算;

  “-”“*”“/” 如果2个运算数中的一个是是非数字,则将它转化成数字执行数学运算。

  “/” 在javascript中,由于所有的数都是浮点数,除法的结果都是浮点数,5 / 2 = 2.5 ;除数为0的结果为正负无穷;0/0为NaN;

  “%”模运算符:计算第一个运算数对第二个运算数的模,就是第一个运算数被第二个运算数除时,返回余数。如果运算数是非数字的,则转换成数字。

  “-”一元取反:将运算数取反,如果运算数不是数字,则转化成数字。

  “++”“--”增量运算符/减量运算符号:运算数必须是一个变量、树组的一个元素或对象的一个属性。如果运算数不是数字,则转换成数字。

  注意:如果“++”位于运算数之前,先对运算数进行增量,然后计算运算数增长后的值。

  如果“--”位于运算数之后,先计算运算数未增长之前的值,然后对运算数增量。

  例如:i = 1; //赋值给i值1

  j = ++i; //先将i增量为2,然后将2赋值给j,i的值是2,j的值也是2。

  i = 1; //赋值给i值1

  j = i++; //先将i赋值给j,然后对将i值增量到2,i的值是2,j的值是1。

  减量运算符“--”与“++”相同。

  2、等同运算符与全同运算符

  (I)“==”“!==”等同运算符与非等同运算符:

  比较2个运算数,返回一个不布尔值。

  比较数值、字符串、布尔值使用的都是量值。当且仅当两个变量存放的值相等的时候,他们才相等。

  比较对象、数组、函数的时候,使用的是引用,只有2个变量引用的是同一个对象时,他们才是相等的。两个不同的数组是完全不同的,即使他们具有完全相同的元素。对于存放对象、数组、函数的引用的变量来说,只有当他们引用的是同一个对象、数组、函数的时候,他们才相等。

  注意!应遵循的原则:

  当两个运算数的类型不同时:将他们转换成相同的类型,

  1)一个数字与一个字符串,字符串转换成数字之后,进行比较。

  2)true转换为1、false转换为0,进行比较。

  3)一个对象、数组、函数 与 一个数字或字符串,对象、数组、函数转换为原始类型的值,然后进行比较。(先使用valueOf,如果不行就使用toString)

  4)其他类型的组合不星等。

  想两个运算数类型相同,或转换成相同类型后:

  1)2个字符串:同一位置上的字符相等,2个字符串就相同。

  2)2个数字:2个数字相同,就相同。如果一个是NaN,或两个都是NaN,则不相同。

  3)2个都是true,或者2个都是false,则想同。

  4)2个引用的是同一个对象、函数、数组,则他们相等,如果引用的不是同一个对象、函数、数组,则不相同,即使这2个对象、函数、数组可以转换成完全相等的原始值。

  5)2个null,或者2个都是未定义的,那么他们相等。

  “!=”非等同运算符:与等同运算符检测的结果相反。

  (II)“===”“!===”全同运算符与非全同运算符号:

  全同运算符遵循等同运算符的比较规则,但是它不对运算数进行类型转换,当两个运算数的类型不同时,返回false;只有当两个运算数的类型相同的时候,才遵循等同运算符的比较规则进行比较。

  “!==”非全同运算符与全同运算符比较的结果相反。如果两个运算数的类型或者值不同的时候,返回true。

  3、比较运算符

  这些比较运算符用于比较不同类型的值,结果返回一个布尔值。

  “<”“>”“<=”“>=”

  注意规则:比较的运算数可以是任意类型的,但是只能在数字和运算数上执行。不是数字和字符串的运算数将被转换成数字或字符串。

  1)如果两个运算数都是数字,或者都可以转换成数字,则按照数字的大小进行比较;

  2)如果两个运算数都是字符串,或者都可以转换成字符串,则将按照字母顺序进行比较;

  3)如果字符串遇到数字,则将字符串转换成数字进行比较。

  4)如果运算数既不能转换成数字,也不能转换成字符串,则返回结果false。

  4、字符串运算符

  并没有专用的字符串运算符,只是有些运算符在遇到字符串运算数的时候,表现不同。

  (I)“+”连接2个字符串;

  1)当2个运算数都是字符串的时候,连接起来;

  2)当其中有一个是数字的时候,将数字转换成字符串,连接起来;

  (II)“>”这样的比较运算符通过比较确认两个字符串的顺序,比较采用字符的顺序,较小的位于教大的前面,大写字母位于小写字母之前。

  (III)“+”的作用方法取决于计算顺序,

  如:s = 1 + 2 +"var" 则:返回结果3var; 因为先计算1+2,然后将结果3转换成字符串与"var"连接;

  如:s = "var" + 1 + 2 则:返回结果var12; 因为先计算var与1的连接,在将结果var1与转换成字符串的2连接起来。

  5、逻辑运算符

  用于执行布尔运算,常常和比较运算符一起使用,来表示复杂的比较运算。

  “&&” 逻辑与运算、“||”逻辑或运算符、“!”逻辑非运算符

  (I)“&&”当两个运算数都是布尔值的时候,逻辑与对他们进行and操作,即:当且仅当两个布尔值都是true的时候,返回结果true,否则返回false。

  注意:实际表现

  “&&”将检测第一个表达式运算数布尔值,如果第一个运算数表达式返回false,则返回左边第一个运算数表达式的值:false;否则将继续检测第二个即右边的运算数表达式,然后返回第二个运算数表达式的值;

  例如:if (a = b) stop(); 与 (a = b) && stop(); 等价

  不赞成使用这个方法,因为运算符右边的代码不能保证会被执行,

  例如:if ((a < b) && (b++ <10) ) stop();如果运算符右边的增量必须的话,却有可能由于前面的返回值而不被执行,一般反对在&&的右边使用具有其他作用的表达式(赋值、函数调用、增减量);

  将“&&”看作是一个布尔代数的运算符,会更简单与安全。

  (II)“||”当两个运算数都是布尔值的时候,逻辑或对他们进行or操作,即:当两个布尔值有一个是true的时候,返回结果true,否则返回false。

  注意:实际表现

  “||”将检测第一个表达式运算数布尔值,如果第一个运算数表达式返回true,则返回左边第一个运算数表达式的值:true;否则将继续检测第二个即右边的运算数表达式,然后返回第二个运算数表达式的值;

  同样不赞成使用这个方法,因为运算符右边的代码不能保证会被执行,

  一般反对在||的右边使用具有其他作用的表达式(赋值、函数调用、增减量);

  将“||”看作是一个布尔代数的运算符,会更简单与安全。

  (III)“!”逻辑非是一个一元运算符,放在运算数之前,它的目的是对运算数取反。

  6、赋值运算符

  (I)“=”是赋值运算符;他总是期望左边的运算数是一个变量、数组的一个元素或对象的一个属性;

  期望右边是一个任意类型的任意的值;

  从右到左的结合性,如果一个表达式中有多个赋值运算符,则从最右边开始计算。

  注意:每一个赋值表达式都有一个值,就是运算符右边的值;

  (II)可以使用带操作的赋值运算

  “+=” 左边的值加上右边的值后,赋值于左边的值。“-=”“/=”“*=”方法一样;

  7、其他运算符

  “?:”条件运算符是唯一的一个三元运算符;

  一个表达式的布尔结果?表达式1(任意类型的任意值):表达式2(任意类型的任意值);

  根据第一个运算数的布尔值结果,如果为true,则执行第二个运算数表达式,返回第二个运算数表达式的值;如果第一个运算数的布尔值结果是false,则执行第三个运算数表达式,返回第三个运算数表达式的值。

  三、JavaScript运算符的注意

  1、要注意传递给运算符的数据类型和返回的数据类型!不同的运算符都期望它的运算数表达式计算出的结果符合某种数据类型。

  例如:对字符串是不能进行乘法运算的,"a" * "b" 是不合法的,但是,在可能的情况下,javascript会把表达式转换成正确的类型,因此,表达式 "3" * "5" 是合法的,javascript将字符串转换成数字执行运算,结果返回的是数字15,而不是字符串"15"。

  2、+ 根据运算数的不同,具有不同的表现:

  字符串 + 字符串 = 字符串(被连接);"a" + "b" = "ab" "5" + "6" = "11"

  字符串 + 数字 = (字符串转换成数字)字符串(被连接);"a" + 5 = "a5" 5被转换成字符串 "1" + 0 = "10"

  数字 + 数字 = 数字(相加)5 + 5 = 10。

  3、注意运算符的结合性,有些运算符从左到右的结合性;有些从右到左结合性。

  例如:w = a + b + c 等同于 w = (a + b) + c;

  w = ---b 等同于 w = - ( - ( -b ) ); w = a = b = c 等同于 w= ( a = ( b = c ))

  一元运算符、赋值运算符、三元运算符的结合性是从右到左的;

  JavaScript的运算符就为大家介绍到这里了,希望能对大家在日常中有所帮助。

(0)

相关推荐

  • 对存在JavaScript隐式类型转换的四种情况的总结(必看篇)

    一般存在四种情况,JavaScript会对变量的数据类型进行转换. 目录 * if中的条件会被自动转为Boolean类型 * 会被转为false的数据 * 会被转为true的数据 * 参与+运算都会被隐式的转为字符串 * 会被转为空字符串的数据 * 会被转为字符串的数据 * 会被转为数据类型标记的数据 * 参与*运算都会被隐式的转为数字 * 会被转为0的数据 * 会被转为1的数据 * 会被转为NaN的数据 * == 运算符 * 为true的时候 * 为false的时候 if中的条件会被自动转为B

  • JavaScript隐式类型转换

    JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加.之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加: 复制代码 代码如下: 3 + true; // 4 结果是一个数值型!如果是在C或者Java环境的话,上面的运算肯定会因为运算符两边的数据类型不一致而导致报错的!但是,在JavaScript中,只

  • javascript三元运算符用法实例

    三元运算符用法实例: 如名字表示的三元运算符需要三个操作数. 语法是 条件 ? 结果1 : 结果2;. 这里你把条件写在问号(?)的前面后面跟着用冒号(:)分隔的结果1和结果2.满足条件时结果1否则结果2. 复制代码 代码如下: <script type="text/javascript"> var b=5; (b == 5) ? a="true" : a="false"; document.write(" --------

  • 总结Javascript中的隐式类型转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object.object是引用类型,其它的五种是基本类型或者是原始类型. 比如像是Number() ,还是parseInt() .parseFloat()都属于显示类型转换(强制类型转换): 这一节我们来看一下隐式类型转换(自动转换). 数值自动转换为字符串 var a = 123; alert(a+'456'); // 输出 123456 "+"号为连接符 字符串

  • JavaScript中运算符规则和隐式类型转换示例详解

    前言 本文主要给大家介绍了关于JavaScript运算符规则和隐式类型转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 隐式类型转换 在 JavaScript 中,当我们进行比较操作或者加减乘除四则运算操作时,常常会触发 JavaScript 的隐式类型转换机制:而这部分也往往是令人迷惑的地方.譬如浏览器中的 console.log 操作常常会将任何值都转化为字符串然后展示,而数学运算则会首先将值转化为数值类型(除了 Date 类型对象)然后进行操作. 我们首先来

  • 简单介绍JavaScript数据类型之隐式类型转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object.object是引用类型,其它的五种是基本类型或者是原始类型.我们可以用typeof方法打印来某个是属于哪个类型的.不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换.隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等.. typeof '11' //string typeof(11) //number '11' < 4 //false 本章节单

  • js 与或运算符 || && 妙用

    首先出个题:如图: 假设对成长速度显示规定如下: 成长速度为5显示1个箭头: 成长速度为10显示2个箭头: 成长速度为12显示3个箭头: 成长速度为15显示4个箭头: 其他都显示都显示0各箭头. 用代码怎么实现? 差一点的if,else: Js代码 复制代码 代码如下: var add_level = 0; if(add_step == 5){ add_level = 1; } else if(add_step == 10){ add_level = 2; } else if(add_step

  • 浅析JavaScript中的隐式类型转换

    如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 .google和维基百科中没有找到"显示类型转换","隐式类型转换"的字眼.暂且这么称呼. 一. 运算中存在的隐式类型转换 1, "+"运算符 复制代码 代码如下: var a = 11, b = '22'; var c = a + b; 这里引擎将会先把a变成字符串"11"再与b进行连接,变成了"1122".

  • JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScript中的运算符. 一.JavaScript运算符的种类 1.算术运算符:+ . - .* . / . % . -(一元取反) . ++ . -- 2.等同全同运算符:== . ===. !== . !=== 3.比较运算符:< . > . <= . >= 4.字符串运算符:< .

  • javascript中instanceof运算符的用法详解

    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj在不在Object构造函数中 描述 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上. 实例 1.instanceof的普通的用法,obj instanceof Object 检测Object.prototype是否存在于参数

  • JavaScript中new运算符的实现过程解析

    这篇文章主要介绍了JavaScript中new运算符的实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 废话不多说直接进入正题,首先我们需要先知道new运算符到底做了哪些事情,再来模拟它实现这一功能. 1. 建立一个空的Object对象: 2. 把这个空对象用__proto__链接到原型 3. 用apply绑定对象的this指向 4. 返回新的对象 知道了new的具体过程之后,我们就可以来试一下用代码实现这一过程. // 传参 New

  • JavaScript中展开运算符及应用的实例代码

    展开运算符(spread operator)允许一个表达式在某处展开.展开运算符在多个参数(用于函数调用)或多个元素(用于数组字面量)或者多个变量(用于解构赋值)的地方可以使用. let obj1 = { value1: 1, value2: 2 }; let obj2 = {...obj1 }; console.log(obj2); // {value1: 1, value2: 2} 上面的用法实际相当于 obj2 = {value1: 1, value2: 2} 展开运算符的写法与obj2

  • JavaScript中instanceof运算符的用法总结

    JavaScript中instanceof运算符是返回一个 Boolean 值,指出对象是否是特定类的一个实例. 使用方法:result = object instanceof class其中result是必选项.任意变量.object是必选项.任意对象表达式.class是必选项.任意已定义的对象类. 说明如果 object 是 class 的一个实例,则 instanceof 运算符返回 true.如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false.

  • javascript中in运算符用法分析

    本文实例讲述了javascript中in运算符用法.分享给大家供大家参考.具体分析如下: in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望他的右操作数是一个对象:如果右侧对象拥有一个名为左操作数值的属性名,那么表达式返回true: var point = {x:1,y:1}; "x" in point //true "z" in point //false "toString" in point //true var ary = [

  • JavaScript中逗号运算符介绍及使用示例

    有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) {   k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗号运算符. 下面是MDN对逗号运算符的定义: 逗号运算符计算两个操作数(从左至右)并返回第二个操作数的值. 根据这个定义,可以扩展一下: 逗号运算符从左到右计算两个或多个操作数并返回最后一

  • JavaScript中 this 的绑定指向规则

    目录 问题来源 this 绑定规则 1.默认绑定 2.隐式绑定 3.显示绑定 4.new 绑定 5.内置方法 6.规则优先级 7.规则之外 8.实践 问题来源 在 js 中,有一个疑惑的点 this, 它的指向问题,存在各种各样的,来看一下,它是如何绑定指向的吧 函数在调用时,JavaScript 会默认给 this 绑定一个值 this 的绑定和定义的位置(编写的位置)没有关系 this 的绑定和调用方式以及调用的位置有关系 this 是在运行时,动态绑定的 this 绑定规则 1.默认绑定

  • JavaScript中的运算符讲解

    一.JavaScript 算术运算符 算数运算符用于对数字执行算数运算: +:加法 -:减法 *:乘法 /:除法 %:系数 ++:递加 --:递减 加法运算符(+)对数字相加: var x = 7; var y = 8; var z = x + y; 乘法运算符(*)对数字相乘: var x = 7; var y = 8; var z = x * y; 二.JavaScript 赋值运算符 赋值运算符向 JavaScript 变量赋值. =:x = y 等同于x = y +=:x += y 等同

  • 实例讲解JavaScript中instanceof运算符的用法

    instanceof 运算符简介 在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object".ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题.instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型.与 typeof 方法不同的是,instanceof 方法要求开发者明确地确

随机推荐