解构

  • 解构赋值是对赋值运算符的扩展。
  • 是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
  • 在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

在解构中,有下面两部分参与:

  • 解构的源,解构赋值表达式的右边部分。
  • 解构的目标,解构赋值表达式的左边部分。

数组

  • 基本
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); //1 2 3
  • 可嵌套
let [a, [[b], c]] = [1, [[2], 3]];
console.log(a, b, c); //1 2 3
  • 可忽略
let [a, , b] = [1, 2, 3];
console.log(a, b); //1 3
  • 不完全解构
let [a = 1, b] = []; // a = 1, b = undefined
  • 剩余运算符
let [a, ...b] = [1, 2, 3];
console.log(a, b); //a = 1, b = [2,3]
  • 字符串

在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。

let [a, b, c, d, e] = 'hello';
console.log(a, b, c, d, e); //h e l l o
  • 解构默认值
let [a = 2] = [undefined]; // a = 2

当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。

let [a = 3, b = a] = [];     // a = 3, b = 3
let [a = 3, b = a] = [1];    // a = 1, b = 1
let [a = 3, b = a] = [1, 2]; // a = 1, b = 2
  1. a 与 b 匹配结果为 undefined ,触发默认值:a = 3; b = a =3
  2. a 正常解构赋值,匹配结果:a = 1,b 匹配结果 undefined ,触发默认值:b = a =1
  3. a 与 b 正常解构赋值,匹配结果:a = 1,b = 2

对象

  • 基本
let { foo, bar } = { bar: 'bbb' , foo: 'aaa'};
// foo = 'aaa'
// bar = 'bbb'let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'
  • 可嵌套可忽略
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, {  }] } = obj;
// x = 'hello'
  • 不完全解构
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'
  • 剩余运算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}
  • 解构默认值
let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;

扩展运算符

数组

  • 复制数组:
let arr = [1, 2],arr1 = [...arr];
console.log(arr1); // [1, 2]// 数组含空位
let arr2 = [1, , 3],arr3 = [...arr2];
console.log(arr3); [1, undefined, 3]
  • 合并数组:
console.log([...[1, 2],...[3, 4]]); // [1, 2, 3, 4]

对象

拓展运算符(…)用于取出参数对象所有可遍历属性然后拷贝到当前对象。

  • 基本用法
let person = {name: "Amy", age: 15};
let someone = { ...person };
console.log(someone);  //{name: "Amy", age: 15}
  • 可用于合并两个对象
let age = {age: 15};
let name = {name: "Amy"};
let person = {...age, ...name};
console.log(person);  //{age: 15, name: "Amy"}

注意:自定义的属性和拓展运算符对象里面属性的相同的时候

  1. 自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉。
let person = {name: "Amy", age: 15};
let someone = { ...person, name: "Mike", age: 17};
console.log(someone);  //{name: "Mike", age: 17}
  1. 自定义的属性在拓展运算度前面,则变成设置新对象默认属性值。
let person = {name: "Amy", age: 15};
let someone = {name: "Mike", age: 17, ...person};
console.log(someone);  //{name: "Amy", age: 15}
  1. 拓展运算符后面是空对象,没有任何效果也不会报错。
let a = {...{}, a: 1, b: 2};
console.log(a);  //{a: 1, b: 2}
  1. 拓展运算符后面是null或者undefined,没有效果也不会报错。
let b = {...null, ...undefined, a: 1, b: 2};
console.log(b);  //{a: 1, b: 2}

let

在ES6中我们可以使用新的关键字来声明变量,let声明的变量只在 let 命令所在的代码块内有效(块级作用域、局部作用),ES6 推荐在函数中使用 let 定义变量,而非 var。

基本用法

//{}括起来的代码块
{let a = 0;console.log(a);   // 0
}
console.log(a);   // 报错 ReferenceError: a is not defined

代码块内有效

{let a = 0;var b = 1;}
console.log(b); // 1
console.log(a); // ReferenceError: a is not defined

不能重复声明

var a = 1;
var a = 2;
console.log(a);  // 2let b = 3;
let b = 4;
console.log(b);  // Identifier 'a' has already been declared

不存在变量提升

console.log(a);  //undefined
var a = "banana";console.log(b);  //ReferenceError: b is not defined
let b = "apple";

变量 a 用 var 声明存在变量提升,所以当脚本开始运行的时候,a 已经存在了,但是还没有赋值,所以会输出 undefined。
变量 b 用 let 声明不存在变量提升,在声明变量 b 之前,b 不存在,所以会报错。

const

const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

暂时性死区

var PI = "a";
if(true){console.log(PI);  // ReferenceError: PI is not definedconst PI = "3.1415926";
}
  • let 和const 关键词声明的变量不具备变量提升(hoisting)特性
  • let 和 const 声明只在最靠近的一个块中(花括号内)有效
  • 当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING
  • const 在声明时必须被赋值
  • const 如何做到变量在声明初始化之后不允许改变的,使用 const 声明复杂类型对象时要慎重。

块级作用域

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。

  1. 块级作用域内 var 和 function不允许定义同名变量重复声明
{ var a; function a() {} }{ function a() {} function a() {} }{ var a; var a; }
  1. 块级作用域内部用 var声明的变量 和 function声明的函数,会在全局预编译阶段提升为undefined(这个过程中,内部function声明的提升到全局对象window中 值为undefined,类似于var提升—将会比全局中function声明的函数早一步提升),块级内部代码一开始执行时, 函数发生声明, 则function声明的函数会立马提升到块级作用域头部,此时全局中的值也立马变成函数体
console.log(a, fn);
if (true) {console.log(a, fn);var a = 1;function fn() {}console.log(a, fn);
}
console.log(a, fn);

定义

箭头函数提供了一种更加简洁的函数书写方式。基本语法是:

参数 => 函数体
(参数) => {函数体}
  • 基本语法:
//普通函数
var f = function(a){return a;
}
f(1);  //1//箭头函数
var f = a => a
f(10); //10

当箭头函数没有参数或者有多个参数,要用 () 括起来。

var f = (a,b) => a+b;
f(6,2);  //8

当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。

var f = (a,b) => {let result = a+b;return result;
}
f(6,2);  // 8

当箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来

var f = (id,name) => ({id: id, name: name});
f(6,2);  // {id: 6, name: 2}

注意点:没有 this、super、arguments 和 new.target 绑定。

var a = () => {// 箭头函数里面没有 this 对象,// 此时的 this 是外层的 this 对象,即 Window console.log(this);
}
a(11);var b = () => {console.log(arguments);
}
b(111); // ReferenceError: arguments is not defined

对象中使用箭头函数,this表示全局Window对象

var obj = {name: "xx",show: function() {console.log(this); //this表示当前对象},say: () => {console.log(this); //this表示全局window对象}
}

箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。
理解为:箭头函数中的this 指向的是 最近的父级的正常函数(不是箭头函数)里面的this 所指向的地方 找不到就是window

var obj2 = {a: 10,fn: function() {console.log(this.a);return {a: 20,fn: () => {console.log(this.a);return {a: 30,fn: function() {console.log(this.a);return {a: 40,fn: () => {console.log(this.a);}}}}}}}
}var obj3 = { a: 88 }
obj2.fn().fn().fn().fn();
obj2.fn().fn.call(obj3); // 箭头函数的this是固定的 不可以通过call bind apply改变

注意:箭头函数不可以作为构造函数,也就是不能使用 new 命令,否则会报错

function Person() {console.log(this);
}
new Person(); //Person {}var People = ()=>{console.log(this);
}
new People(); //TypeError: People is not a constructor

使用场景

  • 箭头函数在参数中使用
var arr= [1,2,3];
arr = arr.map((a)=>a*a);
console.log(arr);
  • 箭头函数可以与解构一起使用
//变量为目标,返回值为源
let cal = (a, b) => {return {add: a+b,sub: a-b,mul: a*b,div: a/b};
}
let {add, sub, mul, div} = cal(10, 5);//形参为目标,实参为源
var show = ({one, two}) => {console.log(one + "---" + two);
}
show({one: "hello", two: "你好"});

ES6 之前,JavaScript 的 this 对象一直很令人头大,回调函数,经常看到 var self = this 这样的代码,为了将外部 this 传递到回调函数中,那么有了箭头函数,就不需要这样做了,直接使用 this 就行。
所以,当我们需要维护一个 this 上下文的时候,就可以使用箭头函数。

总结

  • 要有个箭头
  • 箭头的前面是小括号,放形参,只有一个形参的时候可以省略小括号;
  • 箭头的后面是函数体;
  • 如果函数体只有一个语句,没有{},此时的返回值不需要return;
  • 箭头函数里面的this总是指向最靠近的function 内部的this;
  • 对象里面的方法,尽可能不要使用箭头函数;
  • 箭头函数里面没有arguments,可以使用…reset,接收过来就是数组类型,接收的是形参之外的所有的实参;
var show = (a, b, ...reset) => {console.log(a + b);console.log(reset);
}
show(1, 2, 3, 4, 5);

定义

类可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法

  • class 的本质是 function。
  • 它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。
  • 类不可重复声明
  • 类定义不会被提升,这意味着必须在访问前对类进行定义,否则就会报错
// 1. 如何创建类 语法:class 类名 {}
class Fn {};
console.dir(Fn);// 2. 类不能重复声明
class Fn {}; // Identifier 'Fn' has already been declared// 3. 类不会提升
console.log(An); // Cannot access 'An' before initialization
class An {};
// 命名类
class Example {constructor(a) {this.a = a;}
}// 匿名类
let Example = class {constructor(a) {this.a = a;}
}

构造器

  • constructor 方法是类的默认方法,创建类的对象(new 类名)时被调用。也被称为类的构造方法(构造函数、构造器)。一个类中有且仅有一个构造方法。
class People {constructor() { // 固定写法 不能写成其他的方式-例如:1. constructor: function() {} 2. constructor = function() {}console.log("我是构造方法,使用new创建对象时调用");}
}
new People(); // 将执行constructor方法
  • 作用:通过this为类的实例化添加属性和方法(所以在constructor中不能单独定义属性或方法,必须加this)
class Person {constructor(name, age) {this.name = name;this.age = age;// count = 111; // 报错 Uncaught ReferenceError: count is not defined}
}
let person1 = new Person('111', '222');console.log(person1.name);
console.log(person1.age);

方法

原型方法

  • 类的方法是直接放在类中的函数,没有放在constructor中声明
  • 类的方法存在类的原型对象上,类本身无法访问,类的实例对象可以访问
class Person {say() {console.log('类中的say方法');};constructor(name, age) {this.name = name;this.age = age;}
}
let person1 = new Person('大海', 26);
console.log(person1.say);
console.log(Person.say); // undefined// 注意:函数的声明使用赋值语句 或 对象的方法简洁表达式 而不是:因为class内部不是对象的语法环境
class Person {say: function(params) {}; // 报错say = function(params) {}; // 正确写法(不推荐)say() {}; // 正确写法(推荐)constructor(name, age) {this.name = name;this.age = age;}
}

静态方法

  • 类的静态方法和属性直接创建为类本身的属性,只能通过类访问,类的实例对象不能访问
  • 不放在constructor中声明
class Person {say() {console.log('类中的say方法');};constructor(name, age) {this.name = name;this.age = age;};static num = 1; // 用static标识的static say1() {console.log('类的静态方法');}
}
let person1 = new Person('大海', 26);
console.log(Person.say1);
console.log(person1.say1); // undefined
console.dir(Person);
  • 类的普通方法(存在类原型对象上的方法) 可以与 类的静态方法(类本身的方法)同名
class Person {say() {console.log('类中的say方法');};constructor(name, age) {this.name = name;this.age = age;};say1() {console.log('类的方法say1');}static num = 1;static say1() {console.log('类的静态方法say1');}
}
let person1 = new Person('大海', 26);
Person.say1(); // '类的静态方法say1'
person1.say1(); // '类的方法say1'

类中最外层的属性

  • 写在类中最外层的属性会作为实例对象的属性,不是类的属性,也不是类原型属性
class Person {constructor(name, age) {this.name = name;this.age = age;};num = 10;
}
let person1 = new Person('大海', 26);
console.log(person1); // Person {num: 10, name: '大海', age: 26}

继承

  • 作用:解决代码的复用
  • 使用extends关键字实现继承
class Animal { }
class Dog extends Animal {constructor() {super();}
};
console.log(Dog);
  • 子类可以继承父类中所有的方法和属性(包括静态方法和属性)
class Animal {constructor() {this.foots = 4;this.head = 1;this.ears = 2;}static jump() {console.log('I can jump!');};running() {console.log('I can running!');}
}
class Dog extends Animal {constructor() {super();}
};
console.log(Dog.jump);
console.dir(Dog);
const dahuang = new Dog();
dahuang.jump();
dahuang.running();
console.log(dahuang.foots, dahuang.head, dahuang.ears);
  • 子类只能继承一个父类(单继承类不能重复定义),一个父类可以有多个子类
  • 子类的构造方法中必须有super()来指定调用父类的构造方法(没有super()会报错),并且位于子类构造方法中的this之前
class Animal {constructor() {this.foots = 4;this.head = 1;this.ears = 2;}jump() {console.log('I can jump!');};running() {console.log('I can running!');}
}
class Person {}
class Dog extends Animal {constructor() {console.log(111); // 可正常打印this.name = '111'; // 报错super();}
};
const dahuang = new Dog();
  • 子类中如果有与父类相同的方法和属性,将会优先使用子类的(覆盖)
// 方法
class Animal {constructor() {   this.foots = 4,this.head = 1,this.ears = 2;}static jump() {console.log('I can jump in Animal!');};running() {console.log('I can running in Animal!');}
}
class Dog extends Animal {constructor() {super();};static jump() {console.log('I can jump in Dog!');};running() {console.log('I can running in Dog!');}
};
const dahuang = new Dog();
dahuang.running(); // I can running in Dog!
Dog.jump(); // I can jump in Dog!
// 属性
class Animal {constructor() {this.name = "huahua";};count = 99;
}
class Dog extends Animal {constructor(name) {super();this.name = name;};running() {console.log(this.name + ' can running in Dog!');}count = 88;
};
const dahuang = new Dog('dahuang');
dahuang.name; // dahuang
dahuang.count; // 88

内部类:属于外部类的成员,必须通过“外部类.内部类”访问

// 外部类
class Outer {constructor() {console.log("outer");}
}
// 内部类
Outer.Inner = class {constructor() {console.log("Inner");}
}
new Outer.Inner();let p1= new Outer.Inner();
console.log(p1.name);

Promise

概述

promise是异步编程的一个解决方案,它是一个对象,创建方式与普通对象相同。可以通过promise构造函数创建出来,从他可以获取异步操作的消息.
promise有三种状态:进行中,已完成,已失败
Promise是一个构造器,原型上有then,catch方法,对象上有reject、resolve方法。

创建

通过new关键字创建promise对象

var p = new Promise(function(resolve, reject){// 做一些异步操作setTimeout(function(){console.log('执行完成');resolve('随便什么数据');}, 2000);
});

resolve

resolve:异步操作执行成功后的回调函数

let p = new Promise((resolve, reject) => {let n = 1;console.log(n);if (n > 2) {resolve('666');} else {reject('error');}
})
p.then(value => {console.log(value)
}, reason => {console.log(reason)
})

reject

reject:异步操作执行失败后的回调函数
事实上,我们前面的例子都是只有“执行成功”的回调,还没有“失败”的情况,reject的作用就是把Promise的状态置为rejected,这样我们在then中就能捕捉到,然后执行“失败”情况的回调。

const pro = new Promise((resolve, reject) => {reject('1111');
})
pro.then((val) => {console.log('then方法中的第一个参数被执行了');console.log(val);
}, (err) => {console.log('then方法中的第二个参数被执行了');console.log(err);
})

then

promise.then()方法会返回一个新的promise对象 在then中进行return 会被新的promise对象的then捕获

function getPromise() {return new Promise((resolve) => {setTimeout(function() {console.log('异步操作执行完成');resolve('执行成功1');}, 1000);})
}
const pro1 = getPromise();
pro1.then((v) => {console.log(v);return '执行成功2';
}).then((v) => {console.log(v);return '执行成功3';
}).then((data) => {console.log(data);
})

.then中的第一个函数被触发 一定是resolve方法调用 而且代码逻辑没有出错
.then中的第二个函数被触发的情况:

  1. resolve参数中有错误代码 (无论有无resolve() || reject())
  2. reject方法被调用

resolve之后的代码不会被捕获

  1. resolve()/ reject()之后的代码逻辑上有错误 不会被.then中的第二个参数函数捕获 也不会报错
  2. resolve之后的代码逻辑上没有问题,就会有执行

catch

们知道Promise对象除了then方法,还有一个catch方法,它是做什么用的呢?其实它和then的第二个参数一样,用来指定reject的回调,用法是这样:

getNumber();
.then(function(data){console.log('resolved');console.log(data);
}).catch(function(reason){console.log('rejected');console.log(reason);
});

效果和写在then的第二个参数里面一样。不过它还有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。

getNumber().then(function(data){console.log('resolved');console.log(data);console.log(somedata); //此处的somedata未定义
}).catch(function(reason){console.log('rejected');console.log(reason);
});

在resolve的回调中,我们使用了console.log(somedata);而somedata这个变量是没有被定义的。如果我们不用Promise,代码运行到这里就直接在控制台报错了,不往下运行了。但是在这里,会得到这样的结果:
![image.png](https://img-blog.csdnimg.cn/img_convert/ed52ff0b4c78f7097091b5f88c659471.png#clientId=u5bcd7dea-4d42-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=137&id=ud9eb035d&margin=[object Object]&name=image.png&originHeight=205&originWidth=634&originalType=binary&ratio=1&rotation=0&showTitle=false&size=26651&status=done&style=none&taskId=u51c99026-ab08-4cc3-9809-8515f2c9cf3&title=&width=422.6666666666667)
也就是说进到catch方法里面去了,而且把错误原因传到了reason参数中。即便是有错误的代码也不会报错了,这与我们的try/catch语句有相同的功能。

all

  1. Promise.all() 方法用于将多个 Promise 实例, 包装成一个新的 Promise 实例。
  2. 语法:const p = Promise.all([p1, p2, p3]);
    • 只有p1、 p2、 p3的状态都变成fulfilled, p的状态才会变成fulfilled
    • 只要p1、 p2、 p3之中有一个被rejected, p的状态就变成rejected
const p1 = new Promise((res, rej) => {res(1);
})
const p2 = new Promise((res, rej) => {res(2);
})
const p3 = new Promise((res, rej) => {res(3);
});
const p = Promise.all([p1, p2, p3]);
console.log(p);
p.then((v) => {console.log(v);
}).catch((err) => {console.log(err);
})

finally

  1. finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。
  2. finally方法的回调函数不接受任何参数
new Promise((reso, reje) => {reso(1);
}).then((val) => {console.log(val);
}).catch((err) => {console.log(err);
}).finally(() => {console.log('一定会执行的代码');
})

async函数

async

  • 语法
async function name(param) { statements }

参数说明:

  • name: 函数名称。
  • param: 要传递给函数的参数的名称。
  • statements: 函数体语句。
  • 返回值

async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。

async function fn() {// return '函数的返回值';console.log(x);
}
var res = fn();
console.log(res);res.then(v => {console.log(v);
}).catch(err => {console.log(err, 6666);
})

await

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。

  • 语法
[return_value] = await expression;

参数说明:

  • expression: 一个 Promise 对象或者任何要等待的值。
  • 返回值
    返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
    如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。
    正常情况下,await 命令后面是一个 Promise 对象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。(await加普通函数其实就是和不加一样效果)
  • await针对所跟不同表达式的处理方式:
    • Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。
    • 非 Promise 对象:直接返回对应的值。

示例1: await后面是一个Promise对象(函数调用结果):

function testAwait() {return new Promise((resolve, reject)=>{setTimeout(()=>{console.log("返回一个promise对象");resolve("返回数据"); // 如果没有resolve(),代表这个promise没有执行完成 那么下面的helloAsync函数内部的代码也会阻塞,不会继续往下执行}, 2000)});
}
async function helloAsync() {console.log('helloAsync开始执行')var a = await testAwait();console.log(a);console.log('helloAsync结束执行')
}helloAsync();
// 执行结果:
// 返回一个promise对象
// 返回数据
// helloAsyncasync function haha(){await new Promise(function(res,rej){setTimeout(function(){console.log(1);res(123123)},2000)})console.log(2);
}haha();// 1 2

示例2:await后面是一个普通值

async function myAsync() {var res = await 111;console.log(res); // 111
}
myAsync();
function createPromise() {return new Promise((resolve, reject) => {setTimeout(function() {console.log('请求成功');const data = new Array(10).fill({ name: 'Florence', employee: '前端开发工程师' });resolve(data);}, 2000)})
}
async function fn() { // async标识的函数返回值是一个promise对象 函数的return值将会被then接收console.log('async执行了');// const res = createPromise();const res = await createPromise();console.log(res);return 666;
}
let fn_res = fn();
fn_res.then((val) => {console.log(val); // 666
}).catch((err) => {console.log(err);
})

JavaScript(三)相关推荐

  1. JavaScript三种弹出框(alert,confirm和prompt)

    JavaScript三种弹出框(alert,confirm和prompt)用法举例 http://blog.csdn.net/lucky51222/article/details/45604681 我 ...

  2. ABAP, Java和JavaScript三种语言的比较

    写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...

  3. 从零开始学JavaScript三(变量)

    一.变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符. 定义变量时要使用var操作符 如: var message; ...

  4. 两数之和(JavaScript三种算法)

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target  的那 两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个 ...

  5. Web前端第三季(JavaScript):三:第1章:JavaScript基本知识:107-js中变量的声明+108-js中变量的注意事项+109-js中变量的命名规则+110-赋值和算术运算符

    目录 一.目的 1.想:学习前端知识 2.想:记录笔记,下次不用看视频,直接看笔记就可以快速回忆. 二.参考 1.我自己代码的GitHub网址 2.SIKI学院:我参考此视频实操 3.w3school ...

  6. JavaScript 三点 (...) 运算符

    在 JavaScript 中,三点运算符 (...) 意味着两件事: 扩展运算符 其余运算符 当用作扩展运算符时,三点运算符扩展数组的元素,其中需要零个或多个参数. 一个典型的例子是合并两个数组时. ...

  7. JavaScript(三)——函数、变量作用域、方法

    文章目录 1. 函数 2. 变量的作用域 3. 方法 4. 内部对象 4.1 Date 4.2 JSON 4.3 Ajax 1. 函数 在JavaScript中,函数即对象,可以随意地被程序操控,函数 ...

  8. JavaScript三种创建构造函数的方式

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  9. JavaScript三种弹出框(alert,confirm和prompt)用法举例

    目  录 1. 警告(alert) 2. 确认(confirm) 3. 提问(prompt) 1. 警告(alert) 在访问网站的时候,你遇到过这样的情况吗?"咚"的一声,一个小 ...

  10. html使用最ie高版本,从html,css,javascript三方面谈谈“浏览器兼容性”的问题

    不同浏览器的标签默认的外补丁和内补丁不同 *{margin:0;padding:0;} css的hack问题:主要针对IE的不同版本,不同的浏览器的写法不同 IE的条件注释hack: 块属性标签flo ...

最新文章

  1. 按钮右对齐_9张图,学会Excel中的对齐技巧
  2. python算法书籍-你也能看得懂的Python算法书
  3. 原字体_时隔25天,再次更新字体,ios1213
  4. 深度学习时代的目标检测算法综述
  5. 工作293:新的打印操作
  6. Leetcode--41. 缺失的第一个正数
  7. 机器学习实战——KNN及部分函数注解
  8. mldn andoird
  9. Appearance-and-Relation Networks for Video Classification论文笔记 (ARTnet)
  10. c语言/abs()函数和fabs ()函数
  11. 浏览器无法加载本地文件
  12. python 猜词游戏(文本文件、数据库、csv)
  13. python 编写正三角形,倒三角和菱形和各种镂空菱形
  14. [USACO18JAN] Lifeguards S
  15. pytorch dataset自定义_PyTorch 系列 | 数据加载和预处理教程
  16. 英安特1600说明书_英安特AW-BM600常用编程项设置
  17. unity3D修改商店下载路径
  18. php redis中set、setex、setnx、getSet的区别
  19. 小i机器人与腾讯、商汤等发起成立上海人工智能发展联盟
  20. bi平台怎么选,一文详解

热门文章

  1. 为什么复数域中使用共轭转置而不是转置
  2. Oracle 300问
  3. 电压比较器采样电路调试
  4. Django MVT详细说明(三)模板T
  5. NLP实战一 利用OpenAI Codex实现中文转python代码
  6. 影刀RPA自动化学习和部分问题解决方式
  7. 今天心情不错,写个随笔。
  8. 多线程:线程同步与死锁(卖票案例)、线程通信、生产者与消费者
  9. 个人作品设计展示官网源码
  10. 可动平行平板电容建模策略