淘先锋技术网

首页 1 2 3 4 5 6 7

Set

一个不重复数组 对数组去重

var arr = [1,1,2,3,,4,5,5,6,7];
		var s1 = new Set(arr);
		//arr = [...s1];
		arr = Array.from(s1);
		console.log(arr);//1,2,3,4,5,6,7

new set ([])

var s = new Set([1,3,1,3,5,7,9]);
console.log(s);

size 长度

var s = new Set([1,3,1,3,5,7,9]);
console.log("size:",s.size);

add() 添加

var s = new Set([1,3,1,3,5,7,9]);
s.add(12);
console.log(s);

delete()删除

var s = new Set([1,3,1,3,5,7,9]);
s.delete(1);
console.log(s);

clear()清空
for of()遍历

var s = new Set([1,3,1,3,5,7,9]);
for(let i of s){
	console.log(i);
}

has()检测是否有 特点,不重复

map

特点:有序 key可以是任意值 new Map([k,v],[]) size长度 set(k,v)设置
get(k)获取 has()检测是否有 clear()清空 for of(遍历)

var obj = {"b":100,"a":"qq","2":"best","1":"good"};
console.log(obj);
var map = new Map([["b",100],["a","qq"],[2,"best"],[1,"good"]])
console.log(map);

symbol

创建 var s1=Symbol(‘blue’) 符号是唯一 常用与对象的键

 obj={[s1]:'mumu'} 
 obj[s1]

迭代器

JavaScript可迭代对象 1string 字符串 2Array 数组 3Set集合 4Map 键值对
values()值集合 keys()键的集合 entries()键值的集合

apply

执行函数,对象冒充,参数数组

function add(x,y){
	console.log(this,x+y)
}
add.apply{{name:'mumu'},[3,7]}//{name:'mumu'} 10

call

执行函数,对象冒充,参数单个

function add(x,y){
	console.log(this,x+y)
}
add.apply({name:'mumu'},[3,7])//{name:'mumu'} 10

bind

执行函数,对象冒充,参数默认值

var nadd=add.bind({name:'muu'},5);
nadd(10);//{name:'muu'},15

Class类

定义 class Cat{constructor(){}}
初始化类 new Cat()
继承 class Cat extends Animal{}
方法 brak(){}
属性 this.name=18
访问控制 set Age(val){} get Age(){}
调用父类构造函数 super()
静态方法 static sayLog(){} Cat sayLog(){}
静态属性 static num=0 Cat num

// 类: 创造对象一个模板
// 实例:是被类创建的对象 ,一个类可以创建多个实例
// 狗类:名字,咬人,叫
// 猫类:名字,叫
// 动物:名字, 跑
class Animal{
	constructor(name) {
		this.name = name;
	}
	runing(){
		console.log("我会走会跑,主人你在哪里");
	}
}
class Dog extends Animal{
	constructor(name) {
	    super(name);//调用父类的构造函数
		// this类的实例
	}
	// 构造函数(new 类被调用)
	bark(){
		console.log("旺旺旺旺")
	}
}
var d1 = new Dog("大黄");
var d2 = new Dog("旺财");


class Cat extends Animal{
	constructor(name,age=2) {
	     super(name)
		 this.age = age;
		 // 每次构造函数被调用 num 加1 记录有多少个实例
		 Cat.num ++;
		 Cat.sayLog();
		 
	}
	static num = 0;
	//  静态属性 值 0
	static sayLog(){
		console.log(`当前总共有${Cat.num}个只猫`)
	}
	bark(){
		console.log("喵喵喵喵")
	}
	 
	set Age(val){
		if(val>0){
			this.age = val;
		}else{
			console.log("设置年龄不正常");
		}
	}
	get Age(){
		console.log("被GET到了")
		return this.age;
	}
}
var  c1 = new Cat("TOM");
var  c2 = new Cat("Kity",5);
// set get 当我们去设置或者 获取的对数据进行额外的操作,隐藏原本的数据直接操作

模块

特点

  • ES6 的模块自动开启严格模式,不管你有没有在模块头部加上 use strict;。
  • 模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。
  • 每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域。
  • 每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。

export 与 import
基本用法

  • 模块导入导出各种类型的变量,如字符串,数值,函数,类。

  • 导出的函数声明与类声明必须要有名称(export default 命令另外考虑)。

  • 不仅能导出声明还能导出引用(例如函数)。

  • export 命令可以出现在模块的任何位置,但必需处于模块顶层。

  • import 命令会提升到整个模块的头部,首先执行。

/*-----export [test.js]-----*/
let myName = "Tom";
let myAge = 20;
let myfn = function(){
    return "My name is" + myName + "! I'm '" + myAge + "years old."
}
let myClass =  class myClass {
    static a = "yeah!";
}
export { myName, myAge, myfn, myClass }
 
/*-----import [xxx.js]-----*/
import { myName, myAge, myfn, myClass } from "./test.js";
console.log(myfn());// My name is Tom! I'm 20 years old.
console.log(myAge);// 20
console.log(myName);// Tom
console.log(myClass.a );// yeah!

建议使用大括号指定所要输出的一组变量写在文档尾部,明确导出的接口。
函数与类都需要有对应的名称,导出文档尾部也避免了无对应名称。

as 的用法
export 命令导出的接口名称,须和模块内部的变量有一一对应关系。
导入的变量名,须和导出的接口名称相同,即顺序可以不一致。

/*-----export [test.js]-----*/
let myName = "Tom";
export { myName as exportName }
 
/*-----import [xxx.js]-----*/
import { exportName } from "./test.js";
console.log(exportName);// Tom
使用 as 重新定义导出的接口名称,隐藏模块内部的变量
/*-----export [test1.js]-----*/
let myName = "Tom";
export { myName }
/*-----export [test2.js]-----*/
let myName = "Jerry";
export { myName }
/*-----import [xxx.js]-----*/
import { myName as name1 } from "./test1.js";
import { myName as name2 } from "./test2.js";
console.log(name1);// Tom
console.log(name2);// Jerry

不同模块导出接口名称命名重复, 使用 as 重新定义变量名。

import 命令的特点
只读属性:不允许在加载模块的脚本里面,改写接口的引用指向,即可以改写 import 变量类型为对象的属性值,不能改写 import 变量类型为基本类型的值。

import {a} from "./xxx.js"
a = {}; // error
 
import {a} from "./xxx.js"
a.foo = "hello"; // a = { foo : 'hello' }

单例模式:多次重复执行同一句 import 语句,那么只会执行一次,而不会执行多次。import 同一模块,声明不同接口引用,会声明对应变量,但只执行一次 import 。

import { a } "./xxx.js";
import { a } "./xxx.js";
// 相当于 import { a } "./xxx.js";
 
import { a } from "./xxx.js";
import { b } from "./xxx.js";
// 相当于 import { a, b } from "./xxx.js";

静态执行特性:import 是静态执行,所以不能使用表达式和变量。

import { "f" + "oo" } from "methods";
// error
let module = "methods";
import { foo } from module;
// error
if (true) {
  import { foo } from "method1";
} else {
  import { foo } from "method2";
}
// error

export default 命令
在一个文件或模块中,export、import 可以有多个,export default 仅有一个。
export default 中的 default 是对应的导出接口变量。
通过 export 方式导出,在导入时要加{ },export default 则不需要。
export default 向外暴露的成员,可以使用任意变量来接收。

var a = "My name is Tom!";
export default a; // 仅有一个
export default var c = "error"; 
// error,default 已经是对应的导出变量,不能跟着变量声明语句
 
import b from "./xxx.js"; // 不需要加{}, 使用任意变量接收