一、JavaScript拥有以下类型的运算符:
1、一元运算符 (Unary operators)
2、二元运算符
赋值运算符(Assignment operators)
比较运算符 (Comparison operators)
算数运算符 (Arithmetic operators)
位运算符 (Bitwise operators)
逻辑运算符 (Logical operators)
字符串运算符 (String operators)
逗号运算符 (Comma operator)
关系运算符 (Relation operator)
3、条件(三元)运算符 (Conditional operator)
一元运算符
语法
运算符 操作数
操作数 运算符
类型
delete
一、delete操作符,删除一个对象的属性或者一个数组中某一个键值。
delete objectName.property;
delete objectName[index];
delete property; //legal only within a with statement,这种形式只在with声明的状态下是合法的,从对象中删除一个属性。
1、objectName是一个对象名,property是一个已经存在的属性,index是数组中的一个已经存在的键值的索引值。
二、能使用delete删除各种各样的隐式声明,但是被var声明的除外。
如果delete操作成功,属性或者元素会变成undefined。
如果delete可行会返回true,如果不成功返回false。
【实例1】
x = 42
var y = 43
myobj = new Number()
myobj.h = 4 // create property h
delete x // returns true (can delete if declared implicitly)
delete y // returns false (cannot delete if declared with var)
delete Math.PI // returns false (cannot delete predefined properties)
delete myobj.h // returns true (can delete user-defined properties)
delete myobj // returns true (can delete if declared implicitly)
删除数组元素
一、删除数组中的元素时,数组的长度是不变的
【实例1】删除a[3], a[4], a[4]和a[3]仍然存在,变成了undefined
二、delete删除数组中的一个元素,这个元素就不在数组中了。
【实例1】trees[3]被删除,trees[3]仍然可寻址并返回undefined
var trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple')
delete trees[3]
if (3 in trees) {
// 不会被执行
}
1、如果想让数组中存在一个元素但是是undefind值,使用undefined关键字而不是delete操作符。
【实例2】trees[3]分配一个undefined,但是这个数组元素仍然存在
var trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple')
trees[3] = undefined
if (3 in trees) {
// this gets executed (会被执行)
}
typeof
一、typeof运算符返回参数的类型。当我们想要分别处理不同类型值的时候,或者想快速进行数据类型检验时,非常有用。
typeof操作符 可通过下面2种方式使用
typeof operand // 作为运算符
typeof (operand) // 函数形式
1、typeof操作符返回一个表示operand类型的字符串值。
2、operand可为字符串、变量、关键词或对象,其类型将被返回。
3、operand两侧的括号为可选。即有括号和没有括号,得到的结果是一样的。
【示例1】
// 变量
var myFun = new Function('5 + 2')
var shape = 'round'
var size = 1
var today = new Date()
typeof myFun // function
typeof shape // string
typeof size // number
typeof today // object
typeof dontExist // undefined
typeof alert // "function" // alert在JavaScript语言中是一个函数
// 关键词true, null, undefined
typeof true // "boolean"
typeof null // "object" // 这是官方承认的typeof的行为上的错误,是JavaScript语言早期为了兼容性而保留了下来
typeof undefined // "undefined"
typeof Symbol('id') // "symbol"
// 数值、字符串
typeof 0 // "number"
typeof 62 // "number"
typeof 'hello world' // "string"
// 属性值
typeof document.lastModified // string
typeof widow.length // number
typeof Math.LN2 // number
// 方法、属性
typeof blur // function
typeof eval // function
typeof parseInt // function
typeof shape.split // function
// 预定义的对象
typeof Date // function
typeof Function // function
typeof Math // "object"
typeof Option // function
typeof String // function
void
一、void运算符使用方法如下
void (expression)
void expression
1、void运算符,表明一个运算没有返回值。
2、expression是JavaScript表达式,括号中的表达式是一个可选项,当然使用该方式是一种好的形式。
二、可以使用void运算符指明一个超文本链接。该表达式是有效的,但是并不会在当前文档中进行加载。
【实例1】创建了一个超链接文本,当用户单击该文本时,不会有任何效果
<a href="javascript:void(0)">click here to do nothing</a>
下面的代码创建了一个超链接,当用户单击它时,提交一个表单。
<a href="javascript:void(document.form.submit())">click here to submit</a>
数字转化,一元运算符 +
一、加号+有两种形式。一种是二元运算符,还有一种是一元运算符。
二、一元运算符加号,或者说,加号+应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号+则会将其转化为数字。
例如:
// 对数字无效
let x = 1;
alert( +x ); // 1
let y = -2;
alert( +y ); // -2
// 转化非数字
alert( +true ); // 1
alert( +"" ); // 0
1、它的效果和Number(…)相同,但是更加简短。
三、我们经常会有将字符串转化为数字的需求。比如,如果我们正在从 HTML 表单中取值,通常得到的都是字符串。如果我们想对它们求和,该怎么办?
1、二元运算符加号会把它们合并成字符串:
let apples = "2";
let oranges = "3";
alert( apples + oranges ); // "23",二元运算符加号合并字符串
2、如果我们想把它们当做数字对待,我们需要转化它们,然后再求和:
let apples = "2";
let oranges = "3";
// 在二元运算符加号起作用之前,所有的值都被转化为了数字
alert( +apples + +oranges ); // 5
// 更长的写法
// alert( Number(apples) + Number(oranges) ); // 5
(1)一元运算符加号首先起作用,它们将字符串转为数字,然后二元运算符加号对它们进行求和。
① 一元运算符优先级高于二元运算符
② Mozilla 的优先级表中,“一元加号运算符”的优先级是17,高于“二元加号运算符”的优先级13。这也是为什么表达式”+apples + +oranges”中的一元加号先生效,然后才是二元加法。
二元运算符
一、语法
操作数1 运算符 操作数2
赋值运算符
【见】赋值运算符:https://www.yuque.com/tqpuuk/yrrefz/wlq25n
比较运算符
【见】比较运算符:https://www.yuque.com/tqpuuk/yrrefz/wza8dh
算术运算符
【见】算术运算符:https://www.yuque.com/tqpuuk/yrrefz/lhxzv5
位运算符
逻辑运算符
【见】逻辑运算符:https://www.yuque.com/tqpuuk/yrrefz/ybfsoa
字符串运算符
一、连接操作符(+)连接两个字符串相连接,返回另一个字符串,它是两个操作数串的结合。
console.log('my' + 'string') // 'my string'
二、简写操作符+=可以用来拼接字符串。
var myString = 'alpha'
myString += 'bet' // alphabet
逗号操作符
一、逗号操作符(,)对两个操作数进行求值并返回最终操作数的值。它常常用在for循环中,在每次循环时对多个变量进行更新。
【实例1】假如a是一个二维数组,每个维度各有10个元素,以下代码利用逗号操作符来同时改变两个变量的值。
这段代码的功能是打印出该二维数组的对象间元素的值。
var x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
var a = [x, x, x, x, x]
// 一行上有3个运算符
for (var i = 0, j = 9, i <=j; i++; j--) {
console.log('a[' + i + '][' + j + ']=' + a[i][j])
}
二、逗号运算符能让我们处理多个语句,使用,将它们分开。每个语句都运行了,但是只有最后的语句的结果会被返回。
【示例1】
let a = (1 + 2, 3 + 4);
alert( a ); // 7(3 + 4 的结果)
1、这里,第一个语句1 + 2运行了,但是它的结果被丢弃了。随后计算3 + 4,并且该计算结果被返回。
2、逗号运算符的优先级非常低,比=还要低。因此这里的圆括号()非常重要。
(1)如果没有圆括号:a = 1 + 2, 3 + 4会先执行+,将数值相加得到a = 3, 7,然后赋值运算符=执行, ‘a = 3’,然后逗号之后的数值7不会再执行,它被忽略掉了。相当于(a = 1 + 2), 3 + 4。
关系操作符
关系操作符对操作数进行比较,根据比较结果真或假,返回相应的布尔值。
in
一、in操作符,如果所指定的属性确实存在于指定的对象中,则会返回true
propNameOrNumber in objectName
1、propNameOrNumber可以是一个代表着属性名的字符串或者是一个代表着数组索引的数值表达式,而objectName则是一个对象名。
【实例1】in操作的常见用法
// Arrays
var trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple')
0 in trees // true
3 in trees // true
6 in trees // false
'bay' in trees // false (you must specify the index number, not the value at that index)
'length' in trees // true (length is an Array property)
// Predefined objects
'PI' in Math // true
var myString = new String('coral')
'length' in myString // true
// Custom objects
var mycar = {make: 'Honda', model: 'Accord', year: 1998}
'make' in mycar // true
'model' in mycar // true
instanceof
一、如果所判别的对象确实是所指定的类型,则返回true
objectName instanceof objectType
1、objectName是需要做判别的对象的名称,而objectType是假定的对象的类型,例如Date或Array
二、可使用instanceof判断一个对象在运行时的类型
【实例1】需要catch异常时,可以针对抛出异常的类型,来做不同的异常处理。
使用Instanceof去判断theDay是否是一个Date对象。因为theDay是一个Date对象,所以if中的代码会执行。
var theDay = new Date(1995, 12, 17)
if (theDay instanceof Date) {
// statement to execute
}
三元运算符/条件运算符
一、条件运算符通过问号?表示。有时它被称为三元运算符,被称为“三元”是因为该运算符中有三个操作数。
二、条件运算符是JavaScript中唯一需要三个操作数的运算符,是 JavaScript 中唯一一个有这么多操作数的运算符。
语法
let result = 条件(condition) ? value1 : value2 // 计算条件结果,如果结果为真,则返回value1,否则返回value2
| 【示例】当age大于18时,将true赋值给status,否则将false赋值给status```jsx let accessAllowed = (age > 18) ? true : false
1、技术上讲,我们可以省略age > 18外面的括号。问号运算符的优先级较低,所以它会在比较运算符>后执行。<br />(1)下面这个示例会执行和上述示例相同的操作:```javascript
// 比较运算符 "age > 18" 首先执行
//(不需要将其包含在括号中)
let accessAllowed = age > 18 ? true : false;
(2)但括号可以使代码可读性更强,所以我们建议使用它们。
2、在上面的例子中,你可以不使用问号运算符,因为比较本身就返回true/false:javascript
// 下面代码同样可以实现
let accessAllowed = age > 18;
|
| —- |
运算规则
一、条件操作符(三元运算符),条件判断时使用Boolean的隐式转换,即调用Boolean();
二、Boolean()转换规则,【见】数据类型的转换#转换为Boolean类型:https://www.yuque.com/tqpuuk/yrrefz/pcx42l#QNCu2