一、一元操作符
1.delete操作符
delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放
语法:delete expression
delete 操作符会从某个对象上移除指定属性。成功删除的时候回返回 true,否则返回 false
2.typeof操作符
typeof操作符返回一个字符串,表示未经计算的操作数的类型
语法:typeof operand; typeof (operand);
3.void运算符
void 运算符 对给定的表达式进行求值,然后返回 undefined
语法:void expression
chrome中即使也没变化,firefox中会变成一个字符串0
点击这个链接会让页面背景变成绿色。二、关系操作符
1.in运算符
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true
语法:prop in object
2.instanceof运算符
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性
语法:object instanceof constructor
三、表达式
1.this
在函数内部,this的值取决于函数被调用的方式。在严格模式下,this将保持他进入执行上下文时的值,所以下面的this将会默认为undefined
当一个函数在其主体中使用 this 关键字时,可以通过使用函数继承自Function.prototype 的 call 或 apply 方法将 this 值绑定到调用中的特定对象
调用f.bind(someObject)会创建一个与f具有相同函数体和作用域的函数,但是在这个新函数中,this将永久地被绑定到了bind的第一个参数,无论这个函数是如何被调用的
在箭头函数中,this与封闭词法上下文的this保持一致。在全局代码中,它将被设置为全局对象
2.super
语法:
super([arguments]); // 调用 父对象/父类 的构造函数
super.functionOnParent([arguments]); // 调用 父对象/父类 上的方法
在构造函数中使用时,super关键字将单独出现,并且必须在使用this关键字之前使用。super关键字也可以用来调用父对象上的函数
constructor() {}
static pingpong() {
return super.ping() + ' pong';
}
}
Computer.pingpong(); // 'ping pong'
3.new
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例
4.展开语法
可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时,将对象表达式按key-value的方式展开
function myFunction(x,2];
myFunction(...args);
构造字面量数组时使用展开语法
数组拷贝
// arr 不受影响
连接多个数组
let arr1 = [0,5];
let arr3 = [...arr1,...arr2];
5.类表达式
类表达式是用来定义类的一种语法
6.函数表达式
function 关键字可以用来在一个表达式中定义一个函数,你也可以使用 Function 构造函数和一个函数声明来定义函数 函数声明提升和函数表达式提升:JavaScript中的函数表达式没有提升,不像函数声明,你在定义函数表达式之前不能使用函数表达式
foo(); // "bar"
function foo() {
console.log("bar");
}
/ 函数表达式 /
baz(); // TypeError: baz is not a function
let baz = function() {
console.log("bar2");
};
7.function*表达式
function关键字可以在表达式内部定义一个生成器函数,function 这种声明方式(function关键字后跟一个星号)会定义一个生成器函数(generator function),它返回一个 Generator 对象
语法:function* name([param[,param[,... param]]]) { statements }
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // undefined
接收参数
console.log(gen.next().value); // 5
console.log(gen.next().value); // 6
传递参数
console.log(iterator.next()); // "{ value: 1,done: false }"
console.log(iterator.next(4)); // "{ value: 6,done: false }"
console.log(iterator.next(5)); // "{ value: 8,done: false }"
console.log(iterator.next()); // "{ value: undefined,done: true }"
表达式