js의 연산자에는 산술 연산자와 관계 연산자가 포함됩니다. 산술 연산자에는 보다 큼, 같음, 보다 작음 및 항등 연산자가 포함됩니다.
JavaScript의 산술 연산은 주로 산술 연산자를 통해 구현됩니다. 산술 연산자에는 단항 산술 연산자와 이진 산술 연산자가 포함됩니다.
단항 산술 연산자는 단일 피연산자에 사용되며 새로운 값을 생성합니다. JavaScript에서 단항 연산자는 우선순위가 높으며 모두 오른쪽 결합입니다. 단항 산술 연산자에는 단항 덧셈(+), 단항 뺄셈(-), 증가(++) 및 감소(-)가 포함됩니다.
단항 더하기(+)
var num = 25; num = +num; //25
단항 더하기 연산자를 숫자가 아닌 값에 적용합니다. ) 변환 함수가 호출되어 이 값을 변환합니다
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() 앞에 1달러 더하기 기호를 사용하여 날짜 문자열을 날짜 밀리초로 변환합니다.
console.log(new Date());//on Jul 11 2016 20:25:54 GMT+0800 (中国标准时间) console.log(+new Date());//1468239954076
1달러 빼기(-)
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
1달러 더하기 1달러 빼기 연산자는 주로 기본 산술 연산에 사용되며 데이터 유형을 변환하는 데에도 사용할 수 있습니다. (lvalue) (변수, 배열 요소 또는 객체 속성). 연산자는 Number() 변환 함수를 통해 피연산자를 숫자로 변환한 후 숫자에 1을 더하고 더해진 값을 변수, 숫자 요소 또는 개체 속성에 다시 할당합니다.
var age = 29; ++age; //相当于 var age = 29; age = age +1;
증분 ++ 연산자의 반환 값 피연산자를 기준으로 한 위치에 따라 달라집니다. 연산자가 피연산자 앞에 오면 피연산자에 대해 증분 계산을 수행하고 계산된 값을 반환하는 것을 전치 증가 연산자라고 합니다. 연산자가 피연산자 뒤에 오면 후위 증가 연산자라고 합니다. 피연산자에 대해 증분 계산을 수행하지만 증가하지 않은 값을 반환합니다.
var i = 1, j = ++i; //i=2 j=2 var i = 1, j = i++; //i=2 j=1
Decrease--연산자의 피연산자도 lvalue는 Number() 변환 함수를 통해 피연산자를 숫자로 변환한 다음 1을 빼고 계산된 값을 피연산자
및 increment++에 다시 할당합니다. 동일한 연산자인 감소-연산자의 반환 값은 해당 연산자에 따라 다릅니다. 피연산자를 기준으로 한 위치입니다. 감소 연산자가 피연산자 앞에 있으면 피연산자는 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
이진 산술 연산자
이진 산술 연산자에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), and Remainder (%)
Addition (+)
【1】피연산자 중 하나가 객체인 경우 객체는 원래 값으로 변환됩니다. 날짜 객체는 toString() 메서드를 통해 변환을 수행하고 다른 객체는 valueOf() 메서드를 통해 변환을 수행합니다. . 대부분의 객체의 valueOf() 메서드는 원시 값을 반환할 수 없으므로 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/'
산술 덧셈을 수행하면 undefine은 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() 변환 함수는 valueOf()를 사용하여 Date 객체를 숫자로 변환하는 데 사용됩니다.
console.log(new Date() + 1);//'Thu Jun 16 2016 11:11:49 GMT+0800 (中国标准时间)1' console.log(new Date() - 1);//1466046941641
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
나누기(/)
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
相等运算符'=='和恒等运算符相似,但相等运算符的比较并不严格,如果两个操作数不是同一类型,相等运算符会尝试进行一些类型转换,然后再进行比较
当两个操作数类型相同时,比较规则和恒等运算符规则相同
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
小于等于运算符(<=)并不依赖于小于或等于运算符的比较规则,而是遵循大于运算符的比较规则,结果取反。如果'>'的比较结果是true,则'<='的比较结果是false;如果'>'的比较结果是false,则'<='的比较结果是true
console.log(1 <= '0');//false,相当于1 <= 0 console.log(true <= '0');//false,相当于1 <= 0 console.log('true' <= 0);//false,相当于NaN <= 0 console.log([1] <= '0');//false,相当于'1' <= '0' console.log([0] <= true);//true,相当于0 <= 1 console.log(1 <= 1);//true
小于运算符(<)用于比较两个操作数,如果第一个操作数小于第二个操作数,则小于运算符的计算结果为true,否则为false
小于运算符与大于运算符的类型转换规则类似,就不再赘述
同样地,大于等于运算符(>=)并不依赖于大于或等于运算符的比较规则,而是遵循小于运算符的比较规则,结果取反。如果'<'的比较结果是true,则'>='的结果是false;如果'<'的比较结果是false,则'>='的结果是true
相关推荐:
JS的递增/递减运算符和带操作的赋值运算符的等价式_javascript技巧
위 내용은 자바스크립트의 연산자 메소드 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!