>  기사  >  웹 프론트엔드  >  자바스크립트의 연산자 메소드 소개

자바스크립트의 연산자 메소드 소개

不言
不言원래의
2018-07-16 17:53:141198검색

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달러 빼기(-)

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 (+)

대부분의 프로그래밍 언어에서 덧셈은 대개 간단한 숫자 연산자이지만, ECMAScript에서는 덧셈 연산이 숫자 덧셈 연산만 수행할 수 있는 것이 아니라, 문자열 연결도 수행합니다.

【1】피연산자 중 하나가 객체인 경우 객체는 원래 값으로 변환됩니다. 날짜 객체는 toString() 메서드를 통해 변환을 수행하고 다른 객체는 valueOf() 메서드를 통해 변환을 수행합니다. . 대부분의 객체의 valueOf() 메서드는 원시 값을 반환할 수 없으므로 toString() 메서드를 통해 변환이 수행됩니다

[참고] 숫자로 변환되는 단일 값 배열 외에도 다른 기본 객체도 변환됩니다. toString() 메서드를 통해 문자로 String form

[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

undefine은 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

相等运算符

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

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

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 <= &#39;0&#39;);//false,相当于1 <= 0
console.log(true <= &#39;0&#39;);//false,相当于1 <= 0
console.log(&#39;true&#39; <= 0);//false,相当于NaN <= 0
console.log([1] <= &#39;0&#39;);//false,相当于&#39;1&#39; <= &#39;0&#39;
console.log([0] <= true);//true,相当于0 <= 1
console.log(1 <= 1);//true

小于运算符

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

小于运算符与大于运算符的类型转换规则类似,就不再赘述

同样地,大于等于运算符(>=)并不依赖于大于或等于运算符的比较规则,而是遵循小于运算符的比较规则,结果取反。如果'<'的比较结果是true,则'>='的结果是false;如果'<'的比较结果是false,则'>='的结果是true

相关推荐:

js与运算符和或运算符的妙用_javascript技巧

JS的递增/递减运算符和带操作的赋值运算符的等价式_javascript技巧

위 내용은 자바스크립트의 연산자 메소드 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.