ES6+常用部分语法

ES6+常用语法

  1. 类 (class)
	class Man {
		constructor(name){
			this.name = "小刘"
		}
		console(){
			console.log(this.name)
		}
	}
	const man = new Man("小王")
	man.console() // 小王
  1. 模块化
// a.js
	export const sub = (a,b) = > a+b;
//b.js
	import {sub} from "./a.js"
	console.log(sub(1,2)); //3
  1. 箭头函数
let fun = (a,b) =>a+b
fun(1,2);//3
let fun1 = a => {a++}
fun1(1)
  1. 函数参数默认值
let fun = (id = 2)=>{//...代码片}
  1. 模板字符串
let name = "小刘"
const str = `My name is ${name}`
  1. 解构赋值
let obj = {name:123,arr:[12,12,3,4,5,6,]}
let {name,arr} = obj //name : 123 ; arr : [12,12,3,4,5,6,]
  1. 拓展操作符
let a = [1,23,2,4,5,6,7,8]
console.log(...a)
  1. 对象属性简写
let name= '小刘'
let age = 24
let obj= {
	name,
	age:age
}
  1. promise
//基础的promise
    let pr = new Promise(function(resolve,reject){
      // resolve('请求成功');
      reject('请求失败');
    });
    pr.then(function(data){
      console.log(data);
    },function(err){
      console.log(err);
    })
// 使用catch
   pr.then(function(data){
      console.log(data);
    }).catch((err)=>{
    	console.log(err)
    })
  1. async … await 及 to方法的分装
    function getJson(url,type){
      return new Promise(function(resolve,reject){
        $.ajax({
          url,
          type,
          dataType:'json',
          success(res){
            resolve(res);
          },
          error(err){
            reject(err);
          }
        })
      })
    }
    function to(p){
      return p.then(data=>{
        return [null,data];
      }).catch(err=>{
        return [err];
      })
    }
    async function asy(){
      let [err,json] = await to(getJson('http://api.shenzhou888.com.cn/v2/ecapi.region.list','post'));
      if(err){
        console.log(err);
      }else{
        console.log(json);
      }
    };
    asy();
  1. Array.prototype.includes() ;查询数组中的值是否存在;返回Boolean
	[1].includes(1);//true
  1. 指数操作符
	2**10; // 1024
  1. object.values()
	let obj = {name : "小刘", age:21}
	Object.values(obj);//["小刘",21]
  1. object.entries()
	let obj = {name : "小刘", age:21}
	Object.entries(obj);//[["name", "小刘"], ["age","21"]]
  1. string.padStart()和string.padEnd();
	// padStart
'hello'.padStart(10); // "     hello"
// padEnd
'hello'.padEnd(10) "hello     "
  1. Array.flat()和Array.flatMap
let arr = [1,2,[3,4]]
arr.flat(Infinity);// [1,2,3,4]
let arr1 = [1,2,3,4]
arr.flatMap(a =>{a**2});  //[1,4,9,16]
  1. string.trimStart() 和 string.rimEnd() 去除首尾空白字符
  2. Nullish coalescing Operator(空值处理)
    表达式在 ?? 的左侧 运算符求值为undefined或null,返回其右侧。
let user = {
    u1: 0,
    u2: false,
    u3: null,
    u4: undefined
    u5: '',
}
let u2 = user.u2 ?? '用户2'  // false
let u3 = user.u3 ?? '用户3'  // 用户3
let u4 = user.u4 ?? '用户4'  // 用户4
let u5 = user.u5 ?? '用户5'  // ''
  1. replaceAll()
    返回一个全新的字符串,所有符合的字符都被替换掉
let str ='hello world'
str.replaceAll('o','l')://"helll wlrld"
  1. Proxy
    基础用法
  • target 参数表示所要拦截的目标对象
  • handler 参数也是一个对象,用来定制拦截行为
配合Reflect使用
	let target = {}
	let handler = {
		get(target,key,receiver){
			console.log("get"+ value)
			return Reflect.get(target, key)
		},
		set(target,key,newVal,receiver){
			console.log("set newVal is" + newVal)
			return Reflect.set(target, key, newVal, receiver)
		},
		has(target,key){
			console.log("has方法")
			return Reflect.has(target, key)
		// ……
		//其余参考更细节的文档
	}
	let proxy = new Proxy(target,handler)
	

具体请参考
下面是 Proxy 支持的拦截操作一览,一共 13 种。

  • get(target, propKey, receiver):拦截对象属性的读取,比如proxy.foo和proxy[‘foo’]。
    参数: 目标对象、属性名和 proxy 实例本身(严格地说,是操作行为所针对的对象)
  • set(target, propKey, value, receiver):拦截对象属性的设置,比如proxy.foo = v或proxy[‘foo’] = v,返回一个布尔值。
    参数: 目标对象、属性名、修改后的属性值和 Proxy 实例本身
  • has(target, propKey):拦截propKey in proxy的操作,返回一个布尔值。
    参数: 目标对象、需查询的属性名。
  • deleteProperty(target, propKey):拦截delete proxy[propKey]的操作,返回一个布尔值。
  • ownKeys(target):拦截Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)、Object.keys(proxy)、for…in循环,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而Object.keys()的返回结果仅包括目标对象自身的可遍历属性。
  • getOwnPropertyDescriptor(target, propKey):拦截Object.getOwnPropertyDescriptor(proxy, propKey),返回属性的描述对象。
  • defineProperty(target, propKey, propDesc):拦截Object.defineProperty(proxy, propKey,propDesc)、Object.defineProperties(proxy, propDescs),返回一个布尔值。
  • preventExtensions(target):拦截Object.preventExtensions(proxy),返回一个布尔值。
  • getPrototypeOf(target):拦截Object.getPrototypeOf(proxy),返回一个对象。
  • isExtensible(target):拦截Object.isExtensible(proxy),返回一个布尔值。
  • setPrototypeOf(target, proto):拦截Object.setPrototypeOf(proxy, proto),返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。
  • apply(target, object, args):拦截 Proxy 实例作为函数调用的操作,比如proxy(…args)、 proxy.call(object, …args)、proxy.apply(…)。
  • construct(target, args):拦截 Proxy 实例作为构造函数调用的操作,比如new proxy(…args)。
<think>我们正在讨论ES6+语法特性。根据引用内容,ES6允许在对象字面量中直接写入变量和函数作为属性和方法,这被称为属性简写和方法简写。此外,ES6引入了let和const关键字来声明变量,它们具有块级作用域。箭头函数也是ES6的重要特性。接下来,我将按照用户要求,提供ES6+语法特性的示例教程,包括:1.变量声明(let和const)2.箭头函数3.对象字面量增强(属性简写、方法简写)4.其他常用特性(如模板字符串、解构赋值、默认参数等)由于引用中提到了前三点,我将重点介绍这些,并补充一些其他常见特性。注意:引用[1]和[2]都提到了对象字面量的简写和箭头函数,引用[4]提到了let和const。引用[3]提到了ES5的变量声明方式,我们可以对比ES6。我将按照以下结构组织回答:一、变量声明:let和const二、箭头函数三、对象字面量增强四、其他ES6+常用特性(简要概述)每个部分都会给出示例代码。然后,根据要求生成相关问题。</think>### ES6+ 语法特性详解与示例教程 #### 一、变量声明:`let` 与 `const` ES6 引入块级作用域变量声明,解决 `var` 的变量提升问题: ```javascript // 块级作用域示例 { let a = 10; const PI = 3.14; // 常量不可重新赋值 var b = 20; // 函数作用域 } console.log(b); // 20 console.log(a); // ReferenceError: a未定义 [^4] ``` #### 二、箭头函数 简化函数语法并绑定 `this`: ```javascript // ES5 普通函数 [1,2,3].map(function(x) { return x*2; }); // ES6 箭头函数 [1,2,3].map(x => x*2); // 多参数示例 const sum = (a, b) => a + b; console.log(sum(3,5)); // 8 [^1][^2] ``` #### 三、对象字面量增强 1. **属性简写**: ```javascript const name = '魔法学院'; const address = 'earth'; const school = { name, address }; // 等效于 {name:name, address:address} [^1][^2] ``` 2. **方法简写**: ```javascript const calculator = { add(a, b) { return a + b; }, // 等效于 add: function(){} square: x => x*x // 箭头函数方法 }; ``` #### 四、其他核心特性 1. **模板字符串**: ```javascript const user = 'Alice'; console.log(`Hello, ${user}! 2+3=${2+3}`); // Hello, Alice! 2+3=5 ``` 2. **解构赋值**: ```javascript // 数组解构 const [x, y] = [1, 2]; // 对象解构 const { name, age } = { name: 'Bob', age: 30 }; ``` 3. **默认参数**: ```javascript function greet(name = 'Guest') { return `Hello, ${name}!`; } ``` 4. **展开运算符(...)**: ```javascript const arr1 = [1, 2]; const arr2 = [...arr1, 3]; // [1,2,3] ``` #### 五、Promise 与异步处理 ```javascript // 异步操作封装 const fetchData = () => new Promise((resolve) => { setTimeout(() => resolve('Data loaded'), 1000); }); // 使用async/await async function load() { const data = await fetchData(); console.log(data); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值