ES6新特性

1.let声明变量和var的区别
var 定义的变量可以被修改,不初始化会输出undefined,不会报错
let 定义的变量是块级作用域,函数内部使用let定义,对函数外部无影响

//1.在同一个作用域中,var可以重复定义一个变量,但是let不可以
//2.let一定是定义了变量再使用,let只在定义它的作用域中才可使用
{
	var a = 1;
	var a = 2;
	//1.不可以
	let b = 1;
	let b = 2;
	//2.不可以
	c = 1;
	let c = 2;
	}
	//3.d不加任何修饰,就是全局变量(在语句块里也是全局变量)
	d = 1;

2.const 常量

{
	//1.定义后不可以改变
	const a = 1;
	//不可以
	a = 2;
	//2.引用类型的可以改变(数组,对象)
	const array = [1,2,3,4,5];
	array.push(6);
	console.log(array);
	//[1,2,3,4,5,6]
	const obj = {name:"张三"};
	obj["age"] = 18;
	console.log(obj);
	//{userName : "张三",age : 18}
}

3.es6委托

{
//带参数的委托方法
	 function delegateFunc(func,val){
	 	func(val);
	}
//普通方法
	function testFunc(val){
   		console.log(val+" this is delegate");
 	}
 	
	delegateFunc(testFunc,"Hello");
	//Hello this is delegate
}

{
//委托方法(带参数)
	 function delegateFunc(func,val){
	 	func(val);
	}
	delegateFunc(function(val){
		console.log(val+"this is delegate");
		},"123");
		
	//匿名方法赋给委托方法的变量	
	var func1 = delegateFunc(function(val){
		console.log(val+" this is delegate");
	});
	delegateFunc(func1,"123");
	//123 this is delegate

	//箭头函数
 	delegateFunc((val=>{
		console.log(val+" this is delegate");
		},"hahaha");
	//hahaha this is delegate
}

c#中的委托

{
//委托方法
	 function delegateFunc(func){
		 func();
	}
	delegateFunc(delegate(){
		console.log("this is delegate");
		});
//lambda表达式
	delegateFunc(()=>{
	        console.log("this is delegate");
	    	});
	}

4.es6字符串

{
	let userName = "张三"
	let str = userName+ " say hello "+"world";
	console.log(str);
	/*
	 //C#7中 ""外$占位符拼串
	 $"{userName} say hello world"
	 //张三 say hello world
	*/
	//字串换行
	let str2 = "adsasdasdasdas"+
	"dasdasdasdasdasd"+
	"asdasd"; 
//字串 `` 保留原格式输出
	 let str3 = `asdasdasdasdasdasdasdasfcas
	 asdasdasdasdasdasd
	 asdasdasdasdasd
	 asdasdasdasdf`
	 //${userName} 占位符
	let str4 =`${userName} say hello world`
	console.log(str4);
	//张三 say hello world
    }

5.es6 Filter ==> 类比c#中的FindAll 或者 Where

{
	let array = [1,2,3,4,5,6,7,8];
	let newArray = array.filter(m => m>5);
	console.log(newArray);
	//[6,7,8]

	let objArray = [
		{userName : "张三",age : 18},
		{userName : "李四",age : 20}
		 ];
	//返回的还是一个数组,即使只有一个对象
	let newobjArray =  objArray.filter(m=>m.userName=="张三");
	console.log(newobjArray);
	// {userName : "张三",age : 18}
}

6.es6 concat 拼接数组

{
     var list1 = [1,2,3,4];
     var list2 =[5,6,7,8];
     list1 = list1.concat(list2);
     console.log(list1);
     //[1,2,3,4,5,6,7,8]
}

7.es6 扩展运算符 (…)①可变参数 类比c#的Params关键字
②解构字符串

{
	var [list1,...list2]=[1,2,3,4,5,6];
	console.log(list1);//1
	console.log(list2);//[2,3,4,5,6]
	
	function func(...list){
		console.log(list);
	}
	func(1,2,3,4,5);//[1,2,3,4,5]
	func(1);//[1]

	var [list1, ...list2] = [];
	console.log(list1);//undefined
	console.log(list2);//[]
	
	var [list1, ...list2] = [1];
   	console.log(list1);//1
    	console.log(list2);//空
	
	//展开数组
	var value = [..."Hello"];
    	console.log(value);
   	//["H","e","l","l","o"]

	//使用展开符来结合数组
	const A = ["a", "b", "c"];
	const B = ["d", "e", "f"];
	const res= [...A,...B];
	console.log(res);
	//["a","b","c","d","e","f"]
}
//对于参数不固定的函数,ES6之前是使用参数对象(arguments)处理:
	function sum() {
	  let total = 0;  
	  for(const argument of arguments) {
	    total += argument;
	  }
	  return total;
	}
//在ES6中使用剩余参数运算符则更为简洁,可读性提高
	function sum(...nums) {
	  let total = 0;  
	  for(const num of nums) {
	    total += num;
	  }
	  return total;
	}
<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</body>
<script>
{
	var nodeList = document.getElementsByTagName("div");
   	var value = [...nodeList];//节点集合转换为数组
    	console.log(nodeList);//html 集合
    	console.log(value);//标签数数组
}
</script>
{
//初始化map [[键,值],[键,值],[键,值]]
	let map = new Map([
            [1,'a'],//数组 键值对
            [2,'b'],
            [3,'c'],
         ])
    console.log(map);
    //{1=>"a",2=>"b",3=>"c"}
    //map 字典转为数组
    let arr = [...map];
    let arrKey = [...map.keys()];
    let arrValue = [...map.values()];
    console.log(arr);
    //[Array(2),Array(2),Array(2)]
    //[1,"a"] [2,"b"] [3,"c"]
    console.log(arrKey);
    //[1,2,3]
    console.log(arrValue);
    //["a","b","c"] 
}
  1. Map 字典对象
    类比于c#中的Dictionary
{
	//key value 的键值对
        var userMap = new Map();
        userMap.set("userName", "张三");
        userMap.set("age", 18);
        console.log(userMap);
        //{"username"=>"张三","age"=>18}
        //key:"username" (键值对)
        //value:"张三"
        console.log(userMap.get("userName"));  
        //张三
 
 //遍历Map  for..of
        for (const [key,value] of userMap) {
           console.log(key);//username   age
           console.log(value);//张三     18
        }
//普通对象
       var user = {}
       user["userName"] = "张三";
       user.age = 18;
       console.log(user);
       //{"username":"张三","age":18}
       //"username":"张三"
       //"age":18
       
    }

9.class类

{
//ES5中类的使用
	function Class(){ //类  大写
	     function func(){ //方法 小写
		      }
	   }
//ES6中类的使用	
	class Person{ //类
        constructor(){ //构造方法
            this.A = "a";  //原型属性
            this.AA = "aa";
        }
        A = "a"; //成员属性
        run(){  //方法
            console.log("person can run");
        }
    }
    
	var person = new Person();
	console.log(person.A); //a
	console.log(person.AA); //aa
	person.run();   //person can run

//ES6中类的继承
	class Student extends Person{
        eat(){
            console.log("student can eat");
        }
        run(){
            console.log("student can run");
        }
    }
    //可以使用父类的属性和方法
    var student = new Student();
    student.run();  //student can run
    //方法名和父类的方法相同,调用子类自己的方法
    student.eat();  //student can eat
}
<think>好的,用户想了解ES6新特性总结。首先,我需要回忆ES6的主要更新点。ECMAScript 6,也就是ES2015,是一个重大版本,引入了很多新特性。根据用户提供的引用,我需要整理这些信息并确保符合格式要求。 首先,引用[1]提到ES6ES5.1的基础变化,这可能包括块级作用域、箭头函数等。然后引用[2]中的Symbol类型,这是ES6新增的数据类型。引用[3]的字符串填充方法padStart和padEnd,引用[4]的解构赋值,以及引用[5]中的ES8特性,但用户问的是ES6,所以可能需要排除ES8的内容,不过引用[5]也提到了ES8的特性,但用户的问题集中在ES6,所以重点在引用[1]到[4]。 接下来要组织内容,按类别分块。比如变量声明、箭头函数、模板字符串、解构赋值、Symbol、Promise、模块系统、类、函数参数默认值、扩展运算符、字符串填充方法等。需要确保每个部分都正确引用对应的来源,比如Symbol来自引用[2],解构赋值来自引用[4],字符串填充来自引用[3],而基础变化来自引用[1]。 另外,用户示例中的回答结构比较清晰,有代码示例和引用标注。需要按照示例的结构,使用中文,正确应用引用标记。比如在解构赋值部分末尾加上[^4],Symbol部分加[^2]等。 还需要注意LaTeX格式,行内数学表达式用$...$,独立公式用$$...$$,但ES6特性可能较少涉及数学公式,可能不需要太多数学表达式,但如果有的话需要正确应用。比如可能涉及解构赋值的模式,但可能不需要数学公式。 然后生成相关问题,需要根据内容提出相关问题,比如ES6的模块化如何工作,解构赋值的应用场景等。确保问题与内容相关,帮助用户深入理解。 最后检查引用是否准确,每个特性对应的引用是否正确,比如箭头函数可能属于引用[1]的基础变化,而解构赋值来自引用[4],Symbol来自引用[2],字符串填充来自引用[3]。需要正确标注来源。 总结下来,需要分点列出ES6新特性,每个特性简要说明并附代码示例,正确引用,最后生成相关问题。确保符合格式要求,如代码块用反引号,引用标记在句末自然添加。</think>### ECMAScript 6 (ES6) 新特性总结 ES6 是 JavaScript 的重大更新,引入了多项核心特性以提升开发效率和代码可读性。以下是关键新特性总结: --- #### 1. **块级作用域与变量声明** - **`let` 和 `const`**:取代 `var`,提供块级作用域支持。 ```javascript let a = 10; // 可重新赋值 const b = 20; // 常量,不可重新赋值 ``` - 避免变量提升问题,增强代码安全性[^1]。 --- #### 2. **箭头函数** 简化函数语法,自动绑定当前上下文(无独立 `this`): ```javascript const sum = (a, b) => a + b; // 等同于 function sum(a, b) { return a + b; } ``` --- #### 3. **模板字符串** 使用反引号 `` ` `` 支持多行文本与变量嵌入: ```javascript const name = "Alice"; console.log(`Hello, ${name}!`); // 输出: Hello, Alice! ``` --- #### 4. **解构赋值** 从数组或对象中提取值并赋值给变量: ```javascript // 数组解构 const [x, y] = [1, 2]; // 对象解构 const { a, b } = { a: 3, b: 4 }; ``` 简化数据访问与赋值操作[^4]。 --- #### 5. **Symbol 类型** 表示唯一值,常用于对象属性键以避免命名冲突: ```javascript const id = Symbol('id'); const obj = { [id]: 123 }; console.log(obj[id]); // 123 ``` 属于 ES6 新增的原始数据类型。 --- #### 6. **Promise 对象** 解决异步回调地狱问题,支持链式调用: ```javascript const fetchData = new Promise((resolve, reject) => { setTimeout(() => resolve('Data received'), 1000); }); fetchData.then(data => console.log(data)); ``` --- #### 7. **模块化(`import`/`export`)** 支持代码模块化组织: ```javascript // math.js export const add = (a, b) => a + b; // main.js import { add } from './math.js'; ``` --- #### 8. **类(`class` 语法)** 提供更接近传统面向对象的语法: ```javascript class Person { constructor(name) { this.name = name; } greet() { return `Hello, ${this.name}!`; } } ``` --- #### 9. **函数参数默认值** 允许为函数参数设置默认值: ```javascript function greet(name = 'Guest') { return `Hello, ${name}!`; } ``` --- #### 10. **扩展运算符(`...`)** 用于数组或对象的展开与合并: ```javascript const arr = [1, 2, ...[3, 4]]; // [1, 2, 3, 4] const obj = { ...{ a: 1 }, b: 2 }; // { a: 1, b: 2 } ``` --- #### 11. **字符串填充方法** `padStart` 和 `padEnd` 实现字符串对齐: ```javascript '5'.padStart(3, '0'); // '005' 'Hi'.padEnd(4, '!'); // 'Hi!!' ``` 便于格式化输出[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值