let // 1不能重复定义, 2函数 全局 现在有了块级 作用域
if(true){
var aaa = 'bb';
var aaa = 'ccc' //可以重复定义
let bbb = 'aa'; //块级作用域
let bbb = 'cc'; //在作用域内不能重复定义
}
定义一个块用括号就是作用域{ } ()
console.log(aaa ); //能访问var aaa 变量穿透, 不能访问let bbb ,作用域锁死
//衡量 常量 指向内存地址
const aa = 'bb';
aa = 'cc'; //错误 不能改变常量
const bb[];
bb.push('1'); //可以操作
--解构数组
function temp(){
return ['1','2','3']
}
let [temp1,temp2,temp3] = temp();
console.log(temp1,temp2,temp3)
-----数组的MAP方法
/**
* map():创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
* 例子,当前新的是accessCount 返回的是accessCount.action赋予新的
*/
const allowedActions = allowAccessCounts
.map(accessCount => accessCount.action)
.map(action => `'${action}'`)
.join(',');
稍微复杂
const results = [一个数组]
return allowAccessCounts.map(accessCount => {
const result = results.find(result => result.action === accessCount.action);
accessCount.value = result && result.value ? result.value : 0;
return accessCount;
});
---------------------
.filter() 去筛选符合条件的数据,和 map的区别就是MAP是形成的新数组是原数组结构的映射,不改变原数组结构,而filter形成的新数组会改变原来的结构
-------reduce 方法,制造新的数组,accumulator为初始值,
const dataset = results.reduce(
(accumulator, result) => {
const [datetimeArray, valueArray] = accumulator;
datetimeArray.push(result.datetime);
valueArray.push(result.value);
return accumulator;
},
[[], []],
);
--------------------
--解构对象
function temp(){
return {temp1: 'aa',temp2:'bb',temp3:'cc'}
}
let { temp1: aa, temp2:bb, temp3:cc } = temp(); // 注意变量的前后顺序 毛猴后的aa为自定义的(口诀:解构,构同音‘后’)
console.log(aa,bb,cc)
----删除对象里的一个属性----
aa是一个对象,
delete aa.name;
delete aa.color;
-----字符串 模板 ---
let my = 'sunyi',you = 'jiajia';
let home = `home is ${my} and ${you}`; //反引号,波浪下的符号
console.log(home );
-----带标签的模板 ---
let my = 'sunyi',you = 'jiajia';
let home = sky`home is ${my} and ${you}`; //反引号,波浪下的符号
function sky(strings,...values){
console.log(strings ); //字符串的值
console.log(values ); //变量的值 sunyi jiajia
//输出方法
let result = '';
for(let