JavaScript 고급 프로그래밍(3판) 학습 노트 4 js 연산자 및 연산자_기본 지식
在ECMAScript中,有非常丰富的运算符和操作符,在这篇文章中将按通常的分类来稍微整理一下,不过在整理之前,先说明一下:
1、虽然标题是运算符和操作符,然而在我看来并没有多少严格区分的必要,在英文中,貌似也是用一个Operator来表示,所以在下文中我可能会混用。甚至,一些不属于运算符和操作符范畴的,我也整理在这里,只要我觉得必要。
2、对于运算符的优先级,你无需一一牢记——我相信你知道最简单的”先乘除,后加减”,至于其它的,如果你不确定,加上括号好了。在ECMAScript中,优先级相同的从左向右运算。
3、对于一些编程语言通用的运算符,比如常用算术运算符(+-*/),我只会简单的列举一下,不会展开,但是请注意,并不是说这些不重要,相反,这些通用运算符甚至处于一个非常基础的地位,只是我觉得你应该早已经熟悉,没必要在这里花时间强调。
4、那么,这里重点关注什么呢?就是一些在ECMAScript中比较特殊的操作符,或者我认为值得花时间强调的一些地方。
运算符与操作符
类别 | 操作符 | 描述 | 说明 |
一元操作符 | ++ | 自增1 |
1、自增(减)有前置和后置两种类型,前置先自增(减)再参与其它运算,后置先参与其它运算再自增(减)。 2、在ES中,自增(减)不仅适用于整数,它们可以作用于任意值,对于不是Number类型的值,会先按前一篇文章中的规则隐式转换为Number,然后再自增(减),此时变量类型也会变成Number类型。 |
-- | 自减1 | ||
+ | 一元加 | 一元加最主要的应用就是将操作数转变为Number类型,相当于调用Number()转换。 | |
- | 一元减 | 一元减则是在一元加的基础之上再取其相反数。 | |
算术操作符 | + | 加 |
1、除了加(+)之外,如果操作数不是Number类型,会自动调用Number()转换为Number类型再进行计算。 2、对于加减(+-),除了作为算术运算符。还可以作为一元操作符(见上)。当然,由于字符串操作中对加号(+)的重载,还可以用于将任意数值(的字符串)相连,这也是第1点中为什么要除了加(+),它在含有非Number类型值时,会将所有操作数转换为字符串相连接。 3、与一般类C语言不同,在ES中,除(/)和取模(%)并不会区分整数和浮点数,比如 5 / 2 = 2.5 而不是2,5.3 % 3 = 2.3 而不是2。 4、任意运算,只要操作数含NaN,结果就是NaN。但并不是结果为NaN就一定有一个操作数为NaN,比如0/0也返回NaN。 5、对于含无穷Infinity的运算,规定比较多,这里就不列举了,可以参考原书,或者自行测试。 |
- | 减 | ||
* | 乘 | ||
/ | 除 | ||
% | 取模 | ||
逻辑操作符
(布尔操作符) |
! | 逻辑非 |
首先将操作数转换为Boolean类型值,然后再取反。可以使用双重非!!将一个数值转换为相应的Boolean值。 |
&& | 逻辑与 |
1、当两个操作数相应的Boolean值均为true时,返回true 2、短路:当第一个操作数相应的Boolean值为false时,会直接返回false,不会再计算第二个操作数。这常常被应用在判断一个变量(属性)是否有定义,如: |
|
|| | 逻辑或 |
1、当两个操作数相应的Boolean值至少有一个为true时,返回true 2、短路:当第一个操作数相应的Boolean值为true时,会直接返回true,不会再计算第二个操作数。 3、逻辑或,除了用于一般的判断之外,还常常被应用在提供默认值的情况,如: function Fn(obj){obj = obj || {}; } 这里如果调用Fn未传入obj,则会自动给obj赋值为undefined,然后因为undefined的相应Boolean值为false,所以会将一个空对象{}赋值给obj,如果调用传入了obj,则因为任意对象的Boolean值为true,所以就不会取后面的{},从而达到给obj一个默认值{}的效果。 这种方式还被应用在大型JS库的多个相对独立的文件中: //file2
|
|
关系操作符 (比较操作符) |
< | 小于 |
1、只要有一个操作数是Number类型或Boolean类型值,就将两个操作数转换成Number类型值(如果需要转换)执行数值比较。 2、字符串比较,会逐个比较字符编码值。 3、操作符是对象时,调用valueOf()(如果没有,就调用toString()),再将结果按上面规则比较。 4、任意数和NaN比较返回false。 |
<= | 小于或等于 | ||
> | 大于 | ||
>= | 大于或等于 | ||
== | 相等 |
1、相等和不等(==、!=)在比较时,只要有必要,就会隐式类型转换。 2、全等和不全等(===、!==)在比较时,不会转换类型,如果类型不一致,直接为!==。 3、结合1、2,可以知道,a===b则一定有a==b,而a!=b则一定有a!==b。 |
|
!= | 기다리지 마세요 | ||
=== | 합동 | ||
!== | 일치하지 않음 | ||
할당 연산자 | = | 과제 | |
복합 산술 할당 연산자 | 산술 연산자 더하기 = | 은 =, -=, *=, /=, %=를 포함한 산술 연산자에 해당합니다. | |
복합 비트 할당 연산자 | 비트 연산자 더하기 = | 은 ~=, &=, |=, ^=, <<=, >>=, >>>= | 을 포함한 비트 연산자에 해당합니다. 🎜>|
비트 연산자 | ~ | 비트 단위 아님 | 비트 반전, 즉 보완 코드를 반환합니다 |
& | 비트 AND | 비트 정렬, 비트 단위 연산, 두 연산 비트가 모두 1인 경우에만 1이 반환되고, 그렇지 않으면 비트가 0을 반환하고, 마지막으로 모든 비트 연산 결과의 조합이 반환됩니다. | |
| | 비트 OR | 비트 정렬, 비트 단위 연산, 두 연산 비트가 모두 0인 경우에만 0이 반환되고, 그렇지 않으면 비트가 1을 반환하고 마지막으로 모든 비트 연산 결과의 조합이 반환됩니다. | |
^ | 비트별 XOR | 비트 정렬된 비트 단위 연산으로, 두 연산 비트가 다르면 1을 반환하고, 그렇지 않으면 비트는 0을 반환하며, 최종적으로 모든 비트 연산 결과의 조합을 반환합니다 | |
왼쪽으로 이동 | 이진수가 왼쪽으로 이동하며 왼쪽으로 이동해도 부호 비트는 변경되지 않습니다. | ||
>> | 오른쪽 쉬프트 | 이진수가 오른쪽으로 이동하고 상위 비트가 일치하는 비트로 채워집니다. | |
>>> | 부호 없는 오른쪽 시프트 | 이진수는 오른쪽으로 바로 이동합니다. 양수의 경우 결과는 >>와 동일합니다. 음수의 경우 음수의 2의 보수가 처리됩니다. 양수의 이진 코드로 | |
문자열 연산자 | 문자열 연결 | 은 먼저 모든 피연산자를 문자열로 변환한 다음 연결하는 concat() 함수와 동일합니다. 문자열을 생성하면 변경되지 않습니다. 문자열 연결을 수행할 때 백그라운드에서 중간 연결 및 삭제 프로세스가 발생합니다. 이는 문자열 연결 작업이 많을 때 기존 브라우저가 느리게 실행되는 이유이기도 합니다. 수행. | |
= | 문자열 연결 | a =b, a=a b와 동일합니다. | |
객체 연산자 | . | 속성 접근자 | 간단한 객체 속성 접근자. |
[] | 속성 또는 (클래스) 배열 액세스 | []를 통해 이름이 변수이거나 특수 문자가 포함된 속성에 액세스할 수 있습니다. | |
신규 | 생성자를 호출하여 객체 생성 | 새로 생성된 객체를 반환하며 생성자 내부의 this는 새로 생성된 객체를 가리킵니다. | |
delete | 变量、属性删除 | 删除属性(变量可以看成是全局对象或执行环境的一个属性)。 | |
void | 返回undefined。 | ||
in | 判断属性 | 对象属性或原型链上的属性。 | |
instanceof | 原型判断 | 比较同一个上下文中的对象是否为另一个对象的原型。 | |
其它操作符 | ?: | 条件操作符 | 语法;var value = exp ? trueExp : falseExp。 相当于var value; if(exp){ value = trueExp;}else{value = falseExp;} |
, | 逗号操作符 | 主要用于声明多个变量,这也是很多JS库的流行做法。例如:var num1=1,num2=2,num3=3; | |
() | 分组操作符 |
主要用途: 1、结合逗号操作符用于赋值。例如:var num = (5,1,4,8,0);这里num最后的值为0。 2、转换为表达式。比如eval('('+jsStr+')');又比如: |
|
typeof | 类型操作符 |
返回一个字符串值:Undefined类型—>'undefined'、Null类型—>'object'、Boolean类型—>'boolean'、Number类型—>‘number'、String—>'string'、内置Function对象的实例—>'function'、其它Object类型—>'object'。(有些浏览器实现略有不同) |
몇 가지 사항을 설명하세요.
1. 여기서는 분류가 그다지 엄격하지 않습니다. 예를 들어 비트 NOT(~), 논리 NOT(!), delete, void, typeof는 모두 단항 연산자로 간주할 수 있으며 자동 증가( )도 사용됩니다. 많은 자료가 산술 연산자로 분류됩니다. 정리할 때 주로 원서의 분류를 참고했고, 자연스러움도 고려했습니다.
2. 더하기 기호( )의 사용법은 비교적 유연합니다. 특히 계산에 사용할 때 그 안의 문자열을 무시하면 실수하기 쉽습니다.
3. Typeof는 일반적으로 단순 데이터 유형을 결정하는 데 사용됩니다. 객체 유형인 경우 반환되는 객체의 대부분이 객체이므로 실용성이 거의 없습니다. 동일한 컨텍스트를 사용하지 않으면 오류가 발생하므로 나중에 개체를 설명할 때 보다 안정적인 또 다른 방법에 대해 자세히 설명합니다.
4. 먼저 다음 코드를 보세요.
var numVal = 10.00,
strVal = '10',
strObj = new String('10')
console.info(numVal == strVal);//true
console.info(typeof (strVal strObj));//string
첫 번째 출력이 사실입니다. 기대 이상인가요? 여기서 == 비교 연산자의 암묵적 유형 변환으로 인해 Number 유형이 String 유형으로 변환되고, Number 유형 10.00은 소수점 이하 0 이외의 값이 없기 때문에 정수 10으로 파싱됩니다. 포인트이므로 비교는 동일합니다. 두 번째 출력은 실제로 비교적 이해하기 쉬운 문자열입니다. strVal은 문자열이고 strObj는 문자열 개체입니다. 두 개를 추가하면 개체가 문자열로 변환되므로 최종 결과도 문자열 유형이 됩니다. (2) 불리언형으로 변환하려면 이중논리부정(!!)을 사용하세요.
(3) 논리 AND(&&)를 사용하여 객체가 존재하는지 감지하고 후속 작업을 수행합니다.
(4) 논리 OR(||)를 사용하여 함수 매개변수에 대한 기본값을 제공합니다.
(5) 그룹화(())를 사용하여 명시적으로 표현식으로 지정합니다.
(6) 중괄호({})를 사용하여 객체 리터럴, JSON 데이터 형식 및 코드 블록을 정의합니다.
(7) 대괄호([])를 사용하여 배열 리터럴, JSON 데이터 형식, 액세스 배열 및 이름이 변수 또는 특수 문자인 액세스 속성을 정의합니다.
6. 비트 연산에 관해서는 결과가 그다지 직관적이지는 않지만 연산 효율이 높고 중간 변수를 사용하지 않고 두 값을 직접 교환하는 것, 홀수와 짝수를 판단하는 것, MD5 암호화 등 흥미로운 응용이 많습니다. 등 관심 있는 친구들이 스스로 관련 정보를 찾고 연구를 진행할 수 있습니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어에는 루트 연산자가 없습니다. 내장 함수 "sqrt()"는 루트를 여는 데 사용되며 예를 들어 "sqrt(4)"와 같은 구문이 사용됩니다. 4에 대해 제곱근 연산을 수행하는 것입니다. 결과는 2입니다. sqrt()는 C 언어에 내장된 루트 연산 함수입니다. 연산 결과는 함수 변수의 산술 제곱근입니다. 이 함수는 음수 연산이나 허수 결과를 출력할 수 없습니다.

Golang 개발자의 경우 "invaliduseof...operator"는 일반적인 오류입니다. 이 오류는 일반적으로 가변 길이 매개변수 함수를 사용할 때 발생합니다. 컴파일 타임에 감지되어 어떤 부분에 문제가 있는지 알려줍니다. 이 기사에서는 이 오류를 해결하는 방법을 소개합니다. 1. 가변 길이 매개변수 함수란 무엇입니까? 가변 길이 매개변수 함수라고도 하는 가변 길이 매개변수 함수는 Golang 언어의 함수 유형입니다. 가변 길이 매개변수 함수를 사용하면 다음과 같이 여러 함수를 정의할 수 있습니다.

Java에서 "%"는 나머지를 의미합니다. 나누기 연산을 수행하고 나머지를 얻을 수 있는 구문은 "연산자 1 % 피연산자 2"입니다. 나머지 연산자 "%"의 피연산자는 일반적으로 양의 정수, 음수 또는 부동 소수점 숫자입니다. 이 연산에 음수가 포함되면 결과는 이전 숫자가 양수인지 음수인지에 따라 달라집니다.

+= 연산자는 왼쪽 피연산자의 값을 오른쪽 피연산자의 값에 더하고 그 결과를 왼쪽 피연산자에 할당하는 데 사용됩니다. 이는 숫자형에 적합하며 왼쪽 피연산자는 쓰기 가능해야 합니다.

PHP에서 "==" 기호는 두 피연산자가 같은지 비교할 수 있는 비교 연산자입니다. 구문은 "연산자 1 == 피연산자 2"입니다. "==" 연산자는 왼쪽 변수(수식 또는 상수)가 오른쪽 변수(수식 또는 상수)와 동일한 값을 갖는지 비교하고 테스트합니다. 이는 데이터가 아닌 변수의 값만 비교합니다. 유형. 두 값이 동일하면 참값을 반환하고, 두 값이 동일하지 않으면 거짓값을 반환합니다.

PHP에서는 "%" 및 "==" 연산자를 사용하여 두 숫자가 나눌 수 있는지 확인할 수 있습니다. 두 숫자를 나누어 나머지를 얻으려면 "%" 연산자만 사용하면 됩니다. ="연산자 구한 나머지가 0인지 판단하면 됩니다. 구문은 "숫자 1 % 숫자 2 == 0"입니다. 0이면 나눌 수 있고, 0이 아니면 나눌 수 없습니다.

Python은 간단하고 읽기 쉬운 구문으로 다양한 분야에서 널리 사용됩니다. 프로그래밍 효율성을 높이고 코드 작동 방식을 깊이 이해하려면 Python 구문의 기본 구조를 숙지하는 것이 중요합니다. 이를 위해 이 기사에서는 Python 구문의 다양한 측면을 자세히 설명하는 포괄적인 마인드 맵을 제공합니다. 변수 및 데이터 유형 변수는 Python에서 데이터를 저장하는 데 사용되는 컨테이너입니다. 마인드맵은 정수, 부동 소수점 숫자, 문자열, 부울 값 및 목록을 포함한 일반적인 Python 데이터 유형을 보여줍니다. 각 데이터 유형에는 고유한 특성과 작업 방법이 있습니다. 연산자 연산자는 데이터 유형에 대한 다양한 작업을 수행하는 데 사용됩니다. 마인드맵은 산술 연산자, 비율 등 Python의 다양한 연산자 유형을 다룹니다.

Python의 매직 메소드는 클래스에 "마법"을 추가할 수 있는 특수 메소드입니다. 종종 두 개의 밑줄로 둘러싸여 이름이 지정됩니다. Dunder(이중 밑줄) 방법이라고도 알려진 Python의 마법 방법입니다. 대부분의 경우 생성자(init), 문자열 표현(str, repr) 또는 산술 연산자(add/mul)와 같은 간단한 작업에 이를 사용합니다. 사실, 여러분이 들어보지 못했을 수도 있지만 매우 유용한 메서드가 많이 있습니다. 이 기사에서는 이러한 마법 메서드를 정리할 것입니다! 우리 모두는 컨테이너 클래스에서 사용할 수 있는 반복자 __len__ 메서드의 크기를 알고 있습니다. len() 함수를 켭니다. 그러나 iterator를 구현하는 클래스 객체의 길이를 얻으려는 경우
