let、const、Symbol、结构赋值-js

ES6新增两个 JavaScript 关键字: let和 const

et声明的变量只在 let 命令所在的代码块内有效(块级作用域、局部作用),ES6 推荐在函数中使用 let 定义变量,而非 var。
const声明一个只读的常量,一旦声明,常量的值就不能改变。

一、let

①let用法
{}括起来的代码块
{
  let a = 0;//对于let,代码块具有作用域
  console.log(a);//0
  //对于var,代码块没有作用域
  var b = 1;
}
console.log(b); // 1
console.log(a);// 报错 ReferenceError: a is not defined
②用let不能重复声明
var a = 1;
var a = 2;
console.log(a);  // 2

let b = 3;
let b = 4;
console.log(b);  // Identifier 'a' has already been declared
③for循环计数器很适合用let
for (var i = 0; i < 10; i++) {
  setTimeout(function(){
    console.log(i);
  })
}
// 输出十个 10

for (let j = 0; j < 10; j++) {
  setTimeout(function(){
    console.log(j);
  })
}
// 输出 0~9
变量 i 是用 var 声明的,在全局范围内有效,所以全局中只有一个变量 i, 每次循
环时,setTimeout 定时器里面的 i 指的是全局变量 i ,而循环里的十个 
setTimeout 是在循环结束后才执行,所以此时的 i 都是 10。

变量 j 是用 let 声明的,当前的 j 只在本轮循环中有效,每次循环的 j 其实都是
一个新的变量,所以 setTimeout 定时器里面的 j 其实是不同的变量,即最后输出
0~9。(若每次循环的变量 j 都是重新声明的,如何知道前一个循环的值?这是因为 
JavaScript 引擎内部会记住前一个循环的值)
④不存在变量提升
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 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

①const基本用法
const ha11d = "srgg"
		console.log(ha11d);
		ha11d = "fsef"
		console.log(ha11d);

结果:在这里插入图片描述

三、暂时性死区

案例1
        let a = 100
        var b = 99
        if (true) {
            let a = 10
            var b = 88
        }
        console.log(a, b);//100 88
//对于let 代码块具有作用域 所以打印100
//对于var,代码块没有作用域
案例2

在这里插入图片描述
对于var,代码块没有作用域,a相对于全局变量,不能用let重复声明,所以报错

案例3
  if (false) {
            var a = 1
            let b = 2
        }
        console.log(a); //undefined
        console.log(b); //报错

        if (true) {
            var a = 1
            let b = 2
        }
        console.log(a); //1
        console.log(b); //报错

四、Symbol基本数据

(1)、包装对象

	  var a = new Number(200)
		var b = 100
		b.age = 20 //new Number(100) 
//这个b.age和下一行的b.age不一样,下一行重新包装对象的
		console.log(b.age) //new Number(100)

(2)、Symbol

       var re = Symbol("hello") //独一无二
        // 它是一个内置全局函,生成一个独一无二的数据
        var re2 = Symbol("hello")
        console.log(re, re2, re == re2, typeof re) //false

结果:
在这里插入图片描述

(3)、案例

		var obj = {
			age: 20
		}
		obj.age = 100
		function tool(obj) {
			let age = Symbol("年龄")
			// obj.age=100
			obj[age] = 20
		}

五、解构赋值

(1)、概述

  • 解构赋值是对赋值运算符的扩展。

  • 是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

  • 在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

(2)、解构模型

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

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

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

(3)、解构赋值用法

①对象模型的结构(Object)
let obj={a:100,b:"hello",c:[10,203,0]}
let {a,b,c}=obj
// 隐式操作: let a=obj.a; let b=obj.b; let c=obj.c
②数组模型的结构(Array)
let arr = [35, 47, 535]
var [a,b,c]=arr
//隐式操作: var a=arr[0]; var b=arr[1]; var c=arr[2]
案例1
    var arr=["fsg",{age:345}]
	var [name,{age}]=arr;
	//隐式操作: var name=arr[0],var age=arr[1].age
案例2
       let arr = [{
			age: 20
		}, {
			name1: "karen"
		}]
		let [{
			age,
			name1 = "jack"
		}] = arr
		//var name1=arr[0].name1
		console.log(age, name1)

结果:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() const _ = db.command exports.main = async (event, context) => { console.log(event) const usersID = event.usersID; const usersIDres = await db.collection('usersdatas').where({_id: usersID}).get() const threepartysid = usersIDres.data[0].threepartysid const allid = await db.collection('usersinternet').where({_id: _.in(threepartysid) }) .orderBy('isGroupRegister','desc') .orderBy('isGroupMember','desc') .orderBy('startdate','desc') .orderBy('closedate','desc') .skip(event.length) .limit(event.limit) .get() return allid; 报错信息是:TypeError: Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a Symbol.iterator method. at _nonIterableSpread (<anonymous>:1:840) at _toConsumableArray (<anonymous>:1:1129) at di._callee2$ (plugManages.js:67) at L (regenerator.js:1) at Generator._invoke (regenerator.js:1) at Generator.t.<computed> [as next] (regenerator.js:1) at asyncGeneratorStep (asyncToGenerator.js:1) at c (asyncToGenerator.js:1)(env: macOS,mp,1.06.2303220; lib: 2.31.1。你能修复问题并把正确代码发给我吗?下面是小程序端代码getMyExtensionLibrary: async function () { let res = await wx.cloud.callFunction({ name: 'getMyExtensionLibrary', data: { usersID: this.openid, length: this.data.list.length, limit: this.data.limit } }) console.log(res.result) this.data.list = [...this.data.list, ...res.result] this.data.list.filter((v, i, a) => { let index = a.findIndex(u => u._id == v._id) return index == i }) this.setData({ list: this.data.list, isEnd: res.result.length < this.data.limit ? true : false , }) },。请你两段代码结合起来详细指出问题以及原因,把正确的代码发给我
05-25

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值