js中的运算符包括算数运算符和关系运算符,其中算术运算符又包括了一元运算符和二元运算符,关系运算符则包括大于,等于,小于以及恒等运算符。

算术运算符

javascript中的算术操作主要通过算术运算符来实现,算术运算符包括一元算术运算符和二元算术运算符两种。

一元算术运算符

一元算术运算符用于一个单独的操作数,并产生一个新值。在javascript中,一元运算符具有很高的优先级,而且都是右结合(right-associative)

一元算术运算符包括一元加法(+)、一元减法(-)、递增(++)和递减(–)

一元加(+)

一元加运算符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响

var num = 25;

num = +num; //25

在对非数值应用一元加运算符时,会调用Number()转型函数对这个值进行转换

var s1 = ’01’;

var s2 = ‘1.1’;

var s3 = ‘z’;

var b = false;

var f = 1.1;

var o = {

valueOf:function(){

return -1;

}

};

s1 = +s1;//1

s2 = +s2;//1.1

s3 = +s3;//NaN

b = +b;//0

f = +f;//1.1

o = +o;//-1

在new Date()前面使用一元加符号,可以把日期字符串,转换为日期毫秒数

console.log(new Date());//on Jul 11 2016 20:25:54 GMT+0800 (中国标准时间)

console.log(+new Date());//1468239954076

一元减(-)

一元减运算符主要用于表示负数

var num = 25;

num = -num;//-25

当一元减运算符用于非数值时,会对该值使用Number()转型函数进行转换,再将得到的数值转换成负数

var s1 = ’01’;

var s2 = ‘1.1’;

var s3 = ‘z’;

var b = false;

var f = 1.1;

var o = {

valueOf:function(){

return -1;

}

};

s1 = -s1;//-1

s2 = -s2;//-1.1

s3 = -s3;//NaN

b = -b;//0

f = -f;//-1.1

o = -o;//1

一元加和一元减运算符主要用于基本的算术运算,也可以用于转换数据类型

sql 数字与字符拼接_js字符串拼接_js字符串变量拼接技巧

递增(++)

递增++运算符对其操作数进行增量(加1)操作,操作数是一个左值(lvalue)(变量、数组元素或对象属性)。运算符通过Number()转型函数将操作数转换为数字,然后给数字加1,并将加1后的数值重新赋值给变量、数字元素或者对象属性

var age = 29;

++age;

//相当于

var age = 29;

age = age +1;

递增++运算符的返回值依赖于它相对于操作数的位置。当运算符在操作数之前,称为前增量(pre-increment)运算符,它对操作数进行增量计算js字符串拼接,并返回计算后的值。当运算符在操作数之后,称为后增量(post-increment)运算符,它对操作数进行增量计算,但返回未做增量计算的(unincremented)值

var i = 1, j = ++i;

//i=2 j=2

var i = 1, j = i++;

//i=2 j=1

递减(–)

递减–运算符的操作数也是一个左值,它通过Number()转型函数把操作数转换为数字,然后减1,并将计算后的值重新赋值给操作数

和递增++运算符一样,递减–运算符的返回值依赖于它相对操作数的位置,当递减运算符在操作数之前js字符串拼接,操作数减1并返回减1之后的值。当递减运算符在操作数之后,操作数减1并返回减1之前的值

var age = 29;

–age;

//相当于

var age = 29;

age = age – 1;

前增量操作符与执行语句优先级相同,整个语句会从左向右求值

var num1 = 2;

var num2 = 20;

var num3 = –num1 + num2;//21

var num4 = num1 + num2;//21

后增量操作符在包含它们的语句被求值之后才执行

var num1 = 2;

var num2 = 20;

var num3 = num1– + num2;//22

var num4 = num1 + num2;//21

二元算术运算符

二元算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)和求余(%)

加法(+)

在多数程序设计语言中,加法通常是简单的数字运算符,但在ECMAScript中,加法运算有大量的特殊行为,不仅可以进行数值加法运算,也可以进行字符串连接

【1】如果其中一个操作数是对象,则对象会转换为原始值:日期对象通过toString()方法执行转换,其他对象通过valueOf()方法执行转换。由于多数对象valueOf()方法无法返回一个原始值,于是会通过toString()方法来执行转换

[注意]除了单数值数组会转换为数字外,其他原生对象都会通过toString()方法转换为字符串形式

【2】在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换成字符串,进行字符串连接,否则,两个操作数都将转换成数字或NaN,进行加法操作

//单数值数组和valueOf()返回值为数值的自定义对象会转换为数值

console.log(1 + []);//1

var o = {

valueOf: function(){

return -1;

}

}

console.log(1 + o);//0

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

console.log(1 + {});//’1[object Object]’

console.log(1 + [1,2]);//’11,2′

console.log(1 + new Date());//’1Thu Jun 16 2016 10:27:13 GMT+0800 (中国标准时间)’

console.log(1 + /0/);//’1/0/’

如果进行算术加法运算,undefined转换为NaN,null转换为0,false转换为0,true转换为1

console.log(” + undefined);//’undefined’

console.log(” + null);//’null’

console.log(” + false);//’false’

console.log(” + true);//’true’

因此,利用加号运算符的特性,可以利用”+任意类型值转换为字符串

减法(-)

相对于加法,减法就简单的多,只涉及到数字的减法运算。使用Number()转型函数将非数值类型转换为数值或NaN

console.log(1 – {});//NaN

console.log(1 – [1,2]);//NaN

console.log(1 – /0/);//NaN

console.log(1 – []);//1

加法有一个特殊之处,在于时间Date对象进行加法运算时使用toString()转换为字符串,而在其他数学运算,包括减法、乘法、除法、求余等运算中,都是使用Number()转换函数将时间Date对象使用valueOf()转换为数字

js字符串变量拼接技巧_sql 数字与字符拼接_js字符串拼接

console.log(new Date() + 1);//’Thu Jun 16 2016 11:11:49 GMT+0800 (中国标准时间)1′

console.log(new Date() – 1);//1466046941641

undefined转换为NaN,null转换为0,false转换为0,true转换为1

console.log(1 – undefined);//NaN

console.log(1 – null);//1

console.log(1 – false);//1

console.log(1 – true);//0

乘法(*)

乘法操作符由一个星号(*)表示,用于计算两个数值的乘积,会通过Number()转型函数将非数值类型转换为数值或NaN

+ Infinity * 0;//NaN

– Infinity * 0;//NaN

Infinity * 非0数值;//Infinity或-Infinity

Infinity * Infinity;//Infinity

除法(/)

除法操作符由一个斜线(/)表示,执行第一个操作数除以第二个操作数的运算,也会通过Number()转型函数将非数值类型转换为数值或NaN

Infinity / Infinity;//NaN

0 / 0;//NaN

非0数值 / 0;//Infinity或-Infinity

Infinity / 0;//Infinity

Infinity / 非0数值;//Infinity

求模(%)

求模(余数)操作符是由一个百分号(%)表示,是第一个操作数除以第二个操作数的余数

//r是余数,n是被除数,d是除数,

//q是整数,在n/d为负时为负,在n/d为正时为正,它应该在不超过n和d的商的前提下尽可能大

r = n – (d * q)

求模结果与第一个操作数的符号保持一致

console.log(5 % 2);//1

console.log(5 % -2);//1

console.log(-5 % 2);//-1

console.log(-5 % -2);//-1

关系运算符

关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或false,关系表达式总是返回一个布尔值,通常在if、while或for语句中使用关系表达式,用以控制程序的执行流程

javascript提供了===、!==、==、!=、=8个关系运算符,分为4类介绍关系运算符

恒等运算符

恒等运算符’===’,也叫严格相等运算符,首先计算其操作数的值,然后比较这两个值,比较过程没有任何类型转换,比较过程如下:

【1】如果两个值的类型不相同,则返回false

console.log(1 === ‘1’);//false

console.log(1 === [1]);//false

【2】如果两个值都是Undefined、Null、Boolean、Number、String相同原始类型的值,值相同,就返回true,否则,返回false

console.log(undefined === undefined);//true

console.log(null === null);//true

console.log(true === true);//true

console.log(false === false);//true

console.log(1 === 1);//true

console.log(2.5 === 2.5);//true

[注意]不论什么进制的数字,在进行关系比较时,最终都转换为十进制进行运算

console.log(10 === 0xa);//true

在数字Number类型中,有一个值比较特殊,是NaN(not a number),它与任何值都不相等;此外,数字Number类型中存在着+0和-0,虽然其符号不同,但值相等

console.log(NaN === NaN);//false

console.log(+0 === -0);//true

两个相同字符串值表现为:相同的长度和相同的字符对应相同的位置

console.log(‘abc’ === ‘abc’);//true

console.log(‘abc’ === ‘acb’);//false

【3】如果两个值引用同一个对象,则返回true,否则,返回false

[注意]更详细的解释是,javascript对象的比较是引用的比较,而不是值的比较。对象和其本身是相等的,但和其他任何对象都不相等。如果两个不同的对象具有相同数量的属性,相同的属性名和值,它们依然是不相等的

console.log([] === []);//false

console.log({} === {});//false

console.log(function(){} === function(){});//false

var a = {};

b = a;

console.log(a === b);//true

恒不等运算符(!==)又叫严格不等于运算符,操作数的比较过程与恒等运算符相同,结果取反。如果’===’的比较结果是true,则’!==’的比较结果是false;如果’===’的比较结果是false,则’!==’的比较结果是true

console.log(1 !== ‘1’);//true

console.log(1 !== 1);//false

console.log(true !== false);//true

console.log({} !== {});//true

js字符串拼接_sql 数字与字符拼接_js字符串变量拼接技巧

相等运算符

相等运算符’==’和恒等运算符相似,但相等运算符的比较并不严格,如果两个操作数不是同一类型,相等运算符会尝试进行一些类型转换,然后再进行比较

当两个操作数类型相同时,比较规则和恒等运算符规则相同

console.log(undefined == undefined);//true

console.log(10 == 0xa);//true

console.log(NaN == NaN);//false

console.log([] == []);//false

当两个操作数类型不同时,相等运算符’==’会遵守如下规则:

【1】如果一个值是对象类型,另一值是原始类型,则对象类型会先使用valueOf()转换成原始值,如果结果还不是原始值,则再使用toString()方法转换,再进行比较

[注意]日期类只允许使用toString()方法转换为字符串。类似地,时间Date对象进行加法运算时使用toString()转换为字符串,而在其他数学运算,包括减法、乘法、除法、求余等运算中,都是使用Number()转换函数将时间Date对象使用valueOf()转换为数字

【2】在对象转换为原始值之后,如果两个操作数都是字符串,则进行字符串的比较

console.log(new Date() == ‘Sat Jun 25 2016 11:07:20 GMT+0800 (中国标准时间)’);//true

【3】在对象转换为原始值之后,如果至少有一个操作数不是字符串,则两个操作数都将通过Number()转型函数转换成数字进行数值比较

console.log(true == 1);//true

console.log(true == 0);//false

console.log(false == ‘1’);//false

console.log(false == ‘0’);//true

console.log(true == ‘true’);//false,相当于1 == NaN

console.log([1] == 1);//true,相当于1 == 1

console.log([1] == ‘1’);//true,相当于’1′ == ‘1’

console.log([] == 0);//true,相当于0 == 0

console.log([] == ‘0’);//false,相当于” == ‘0’

console.log([] == true);//false,相当于0 == 1

console.log([1] == true);//true,相当于1 == 1

var a = {

valueOf:function(){

return 1;

},

toString:function(){

return ‘2’;

}

}

console.log( a == ‘1’);//true,相当于1 == 1

var a = {

valueOf:function(){

return {};

},

toString:function(){

return ‘1’;

}

}

console.log( a == 1);//true,相当于1 == 1

[注意]如果一个值是null,另一个值是undefined,则返回true。虽然Number(null)是0,但null和0并不相等

console.log(null == undefined);//true

console.log(null == 0);//false

[注意]空字符串或空格字符串会转成0

console.log(null == []);//false

console.log(null == ”);//false

console.log([] == ‘ ‘);//false,相当于” == ‘ ‘

console.log([] == ”);//true,相当于” == ”

console.log(0 == ”);//true

不相等运算符(!=)的操作数比较过程与相等运算符相同,结果取反。如果’==’的比较结果是true,则’!=’的比较结果是false;如果’==’的比较结果是false,则’!=’的比较结果是true

console.log(1 != ‘1’);//false,相当于1 != 1

console.log(true != ‘1’);//false,相当于1 != 1

console.log(‘true’ != 1);//true,相当于NaN != 1

console.log([1] != ‘1’);//false,相当于’1′ != ‘1’

console.log([1] != true);//false,相当于1 != 1

大于运算符

大于运算符(>)用于比较两个操作数,如果第一个操作数大于第二个操作数,则大于运算符的计算结果为true,否则为false

大于运算符的操作数可能是任意类型,然而,只有数字和字符串才能真正执行比较操作,因此那些不是数字和字符串的操作数都将进行类型转换,类型转换规则如下:

【1】如果操作数是对象,则这个对象将先使用valueOf()转换成原始值,如果结果还不是原始值,则再使用toString()方法转换

[注意]实际上,在原生对象中,使用valueOf()方法转换为原始值的,只有转换为数字Number类型的时间Date对象,其他对象都通过toString()方法转换为字符串

【2】在对象转换为原始值之后,如果两个操作数都是字符串,则按照字母表的顺序对两个字符串进行比较,这里提到的字母表顺序是指组成这个字符串的16位unicode字符的索引顺序

console.log(‘b’ > ‘a’);//true

console.log(‘B’ > ‘a’);//false

console.log({} > ‘[a]’);//true,相当于'[object Object]’ > ‘[a]’

console.log({} > ‘[p]’);//false,相当于'[object Object]’ > ‘[p]’

console.log([‘a’] > [‘b’]);//false,相当于’a’ > ‘b’

console.log([2] > [11]);//true,相当于’2′ > ’11’

【3】在对象转换为原始值之后,如果至少有一个操作数不是字符串,则两个操作数都转换成数字进行比较

[注意]在等于操作符中,时间Date()对象只允许通过toString()方法转换为字符串,而不允许通过valueOf()方法转换为数字;而在大于操作符中,时间Date()对象允许优先使用valueOf()方法转换为数字

console.log(new Date() > 100);//true,相当于1466826928667 > 100

console.log(true > [0]);//true,相当于 1 > 0

console.log(2 > 1);//true

console.log(11 > ‘2’);//true,相当于11 > 2

console.log(NaN > 1);//false

console.log(1 > NaN);//false

console.log({} > true);//false,相当于 NaN > 1

对于数字和字符串来说,加号运算符和比较运算符的行为有所不同,加号运算符更偏爱字符串,如果它的一个操作数是字符串,就进行字符串连接。而比较运算符则更偏爱数字,只有在两个操作数都是字符串时,才进行字符串的比较

console.log(1 + 2);//3

console.log(‘1’ + ‘2’);//’12’

console.log(‘1’ + 2);//’12’,相当于 ‘1’ + ‘2’

console.log(2 > 1);//true

console.log(‘2’ > ‘1’);//true

console.log(‘2’ > 1);//true,相当于 2 > 1

小于等于运算符(

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688