类型转换:
Number()转换为字符串的的情况下,纯数字会转换成数字,不然一律按照NaN处理
Number('10') //10
Number('10A') //NaN
Number([]) //0
Number({}) // NaN
Boolean({}) //true
Boolean([]) //true4
Boolean(Infinity) // true
连续两个非操作可以将一个数强制转换为 Boolean 类型//
!!1 //true
如果两个操作值都是字符串,则比较字符串对应的 **ASCII 字符编码值**
's' > 'b' //true
运算符
instanceof某个对象是否是另一个对象的实例//
const P = function(){}
const stu = new P()
console.log(stu intanceof P) //true
console.log(true instanceof Boolean); //false
不可配置的属性不能被移除,例如Math,Array,用Object.defineProperty()设置的属性不能删除
const var定义的属性不能删除
删除一个对象的自有属性,而原型链上具有相同名称的属性可用
const a = 1
delete a //fasle
b={
c:2,
d:3
}
delete b.c //true
<a href="javascript:void(0);"/> //这个链接点击之后不会做任何事情
function myFunction(v, w, x, y, z) {}
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
const [first,...rest] = [1,2,3,4,5]
console.log(first) //1
console.log(rest) //2,3,4,5
任何 Iterator 接口的对象都可以用扩展运算符转为**真正的数组**。
var nodeList = document.querySelectorAll('div');
var array = [...nodeList];
let map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
let arr = [...map.keys()]; // [1, 2, 3]
= [...map.keys()]; // [1, 2, 3]
var go = function*() {
yield 1;
yield 2;
yield 3;
};
[...go()]; // [1, 2, 3]
默认值
let [foo = true] = [];
foo; // true
let [x, y = 'b'] = ['a']; // x = 'a', y = 'b'
let [x, y = 'b'] = ['a', undefined]; // x = 'a', y = 'b'
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值是由它的位置决定的;而对象的属性没有次序,**变量必须与属性**同名才能取到正确的值。
let obj = { first: 'hello', last: 'world' };
//这种写法下真正被赋值的是后面的不是前面的,first是匹配模式,f才是变量
let { first: f, last: l } = obj;
x; // 'Hello'
y; // 'World'
var { x, y = 5 } = { x: 1 };
x; // 1
y; // 5
函数解构赋值
function move({ x = 0, y = 0 } = {}) {
return [x, y];
}
语句和声明
1.continue:结束当前(或标签)的循环语句的本次迭代,并继续执行循环的下一次迭代 2. throw:抛出异常 3.
function fn() {
try {
return 1;
} catch (err) {
return 2;
} finally {
console.log(3);
}
}
遍历对象
在可迭代对象(array,map,Set,string,argyments)上创建一个迭代循环
迭代Map
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);
for (let entry of iterable) {
console.log(entry); //["a", 1], ["b", 2], ["c", 3]
}
for (let [key, value] of iterable) {
console.log(value);
}
//迭代arguments
(function() {
for (let argument of arguments) {
console.log(argument);
}
})(1, 2, 3);
//迭代dom
给每个article的xiap加read
let articleParagraphs = document.querySelectorAll("article > p");
for (let paragraph of articleParagraphs) {
paragraph.classList.add("read");
}
对于`for...of`的循环,可以由 `break`, `throw` 或 `return` 终止。在这些情况下,迭代器关闭。
for in 和 for of 的区别:for in迭代的是对象的属性,for of迭代的是对象的值
let iterable = [3, 5, 7];
iterable.foo = 'hello';
'hello'
for(let i in iterable){
console.log(i) //0,1,2,foo
}
经常和break和continue一起使用,在一条语句前面加个可以引用的标识符
let str = '';
loop1:
for (let i = 0; i < 5; i++) {
if (i === 1) {
continue loop1;
}
str = str + i;
}
console.log(str) // '0234'