Web前端-JavaScript(ES6)

文章目录

    • 1.ES5数组新方法
      • 1.1 数组方法forEach遍历数组
      • 1.2 数组方法filter过滤数组
      • 1.3 数组方法some
      • 1.4 some和forEach和filter的区别
      • 1.5 find()
      • 1.6 findIndex()
      • 1.7 trim去除字符串两端的空格
      • 1.8 获取对象的属性名
      • 1.9 Object.defineProperty
    • 2.ES6语法
      • 2.1 ES6概述
      • 2.2 为什么使用 ES6
      • 2.3 新增语法
        • let
        • const
        • let、const、var 的区别
      • 2.4 解构赋值
        • 数组解构
        • 对象解构
        • 字符串的解构赋值
      • 2.6 函数扩展
        • 参数默认值
        • 参数解构赋值
        • 剩余参数
        • 扩展运算符
        • 剩余参数和解构配合使用
      • 2.7 Array 的扩展方法
        • 扩展运算符(展开语法)
          • 扩展运算符可以应用于合并数组
          • 将类数组或可遍历对象转换为真正的数组
      • 2.8 箭头函数
        • 面试题
      • 2.9 String 的扩展方法
        • startsWith() 和 endsWith()
        • .repeat()
        • includes()
        • 模板字符串
          • 模板字符串中可以解析变量
          • 模板字符串中可以换行
          • 在模板字符串中可以调用函数
      • 2.10 Set 数据结构
        • 实例方法

1.ES5数组新方法

1.1 数组方法forEach遍历数组

//forEach 迭代(遍历) 数组 并求出数组累加和
var arr = [1, 2, 3, 4, 5];
var sum = 0;
arr.forEach(function (value, index, arr) {console.log('当前数组元素' + value);console.log('当前数组元素的索引号' + index);console.log('数组本身' + arr);sum += value;
})console.log(sum);

1.2 数组方法filter过滤数组

var arr = [12, 66, 4, 88, 3, 7];
var newArr = arr.filter(function (value, index, arr) {return value >= 20;
});
console.log(newArr);
//[66,88] //返回值是一个新数组

1.3 数组方法some

//some 查找数组中是否有满足条件的元素 
var arr = [10, 30, 4];
var flag = arr.some(function (value, index, arr) {return value < 3;
});
console.log(flag);//false返回值是布尔值,只要查找到满足条件的一个元素就立马终止循环

1.4 some和forEach和filter的区别

  • 如果查询数组中唯一的元素, 用some方法更合适,在some 里面 遇到 return true 就是终止遍历 迭代效率更高
  • 在forEach 里面 return 不会终止迭代
  • filter 也是查找满足条件的元素 返回的是一个数组 而且是把所有满足条件的元素返回回来

1.5 find()

用于找出第一个符合条件的数组成员,如果没有找到返回undefined

var arr = [{id: 1,name: '张三'},{id: 2,name: '李四'},{id: 3,name: '王五'}
];
var res = arr.find(function (value, index, arr) {console.log(1);return value.name == '李四';
});
console.log(res);//返回的是数组里的满足条件的元素 也就是一个对象
//找数组里面符合条件的值,当数组中元素id等于2的查找出来,注意,只会匹配第一个

1.6 findIndex()

用于找出第一个符合条件的数组成员的位置,如果没有找到返回-1

var array = [10, 20, 50, 55, 88];
var index = array.findIndex(function (value, index, arr) {return value == 50
});
console.log(index);//返回满足条件的索引

1.7 trim去除字符串两端的空格

var str = '   hello   '
console.log(str.trim())  //hello 去除两端空格
var str1 = '   he l l o   '
console.log(str1.trim())  //he l l o  去除两端空格
var input = document.querySelector('input');
var btn = document.querySelector('button');
var div = document.querySelector('div');
btn.onclick = function () {var str = input.value.trim();div.innerHTML = str;console.log(div.innerText.length);
}

1.8 获取对象的属性名

Object.keys(对象) 获取到当前对象中的属性名 ,返回值是一个数组

// 用于获取对象自身所有的属性
var obj = {id: 1,name: '小米',price: 1999,num: 2000
};
//把对象中 所有属性 放到数组中
var arr = Object.keys(obj);
//遍历数组中所有元素
arr.forEach(function (value) {console.log(value);
});

1.9 Object.defineProperty

Object.defineProperty设置或修改对象中的属性

Object.defineProperty(对象,修改或新增的属性名,{value:修改或新增的属性的值,
})	

案例演示:

// Object.defineProperty() 定义新属性或修改原有的属性
var obj = {id: 1,name: '小米'
};//传统模式
obj.id = 2;
console.log(obj.id);//修改 属性值
Object.defineProperty(obj, 'name', {value: '华为'
});
console.log(obj);//增加 属性值
Object.defineProperty(obj, 'price', {value: 4999
});
console.log(obj);//无法修改属性值
Object.defineProperty(obj, 'id', {//如果值为false 不允许删除这个属性值configurable: false,//如果值为false 不允许修改这个属性值writable: false
});
delete obj.id//删除失败
obj.id = 122//修改失败
console.log(obj);

2.ES6语法

2.1 ES6概述

ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。

年份版本
2015年6月ES2015
2016年6月ES2016
2017年6月ES2017
2018年6月ES2018

2.2 为什么使用 ES6

每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。

  • 变量提升特性增加了程序运行时的不可预测性
  • 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码

2.3 新增语法

let
  1. ES6中新增了用于声明变量的关键字

    1. let声明的变量只在所处于的块级有效

       if (true) { let a = 10;}
      console.log(a) // a is not defined
      
    2. **注意:**使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性

    3. 不存在变量提升

      console.log(a); // a is not defined 
      let a = 20;
      
  2. 不允许重新声明

    1. 利用let声明的变量会绑定在这个块级作用域,不会受外界的影响

       var tmp = 123;if (true) { tmp = 'abc';let tmp; } 
      
  3. 经典面试题

 var arr = [];for (var i = 0; i < 2; i++) {arr[i] = function () {console.log(i); }}arr[0]();arr[1]();
image-20230302165901281

**经典面试题图解:**此题的关键点在于变量i是全局的,函数执行时输出的都是全局作用域下的i值。

 let arr = [];for (let i = 0; i < 2; i++) {arr[i] = function () {console.log(i); }}arr[0]();arr[1]();
image-20230302170033385

**经典面试题图解:**此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的,

​ 函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的i值.

const
  1. 声明常量,常量就是值不能变化的量

    1. 具有块级作用域

       if (true) { const a = 10;}
      console.log(a) // a is not defined
      
    2. 常量赋值后,值不能修改

      const PI = 3.14;
      PI = 100; // Assignment to constant variable.
      
    3. 声明常量时必须赋值

      const PI; // Missing initializer in const declaration
      
let、const、var 的区别
varletconst
函数作用域块作用域块作用域
变量提升不存在变量提升不存在变量提升
值可更改值可更改值不可更改

2.4 解构赋值

数组解构
<body><script type="text/javascript">// 1. 数组解构允许我们按照一一对应的关系从数组中提取值 然后将值赋值给变量// var arr = [1, 2, 3]// var [a, b, c] = arr;// console.log(a, b, c);// 2.数组的解构赋值, 他是与书写顺序是有关系的// var [a, b, c] = [1, 2, 3];// console.log(a, b, c);// 3.数组的解构赋值默认值的添加方式let [a = 0, b = 0, c = 0] = [, ,];console.log(a, b, c);</script>
</body>
对象解构
// 1.对象解构允许我们使用变量的名字匹配对象的属性 匹配成功 
// 将对象属性的值赋值给变量
var { name, age } = { name: "码上未来", age: 2 }
console.log(name);
console.log(age);// 2.对象的解构赋值, 与顺序无关
var { name, age } = { age: 2, name: "码上未来" }
console.log(name);
console.log(age);
字符串的解构赋值
  // 字符串的解构赋值let [a, b, c, d, e] = 'hello';console.log(a, b, c, d, e);

2.6 函数扩展

参数默认值
//1 参数默认值
//写法一
function fn(param = "blue") {console.log(param);
}
fn("yellow")
//写法二
function fn(param) {param = param || "blue"console.log(param);
}
fn("yelow")
参数解构赋值
function fn({ name = '码上未来' }) {console.log(name);
}
fn({ name: 'codingfuture' })
剩余参数

这种方式很方便的去声明不知道参数情况下的一个函数

function fn(a, b, ...param) {console.log(a);console.log(b);console.log(param);
}
fn(1, 2, 3, 4, 5)
扩展运算符
function fn(a, b, c, d, e) {console.log(a + b + c + d + e);
}
// fn(1, 2, 3, 4, 5)
let array = [1, 2, 3, 4, 5, 6]
fn(...array)
剩余参数和解构配合使用
    var arr = [1, 2, 3]var [a, ...b] = arr;console.log(a, b);

2.7 Array 的扩展方法

扩展运算符(展开语法)

扩展运算符可以将数组或者对象转为用逗号分隔的参数序列

   	// 扩展运算符可以将数组拆分成以逗号分隔的参数序列let ary = ["a", "b", "c"];console.log(...ary);
扩展运算符可以应用于合并数组
    let ary1 = [1, 2, 3];let ary2 = [4, 5, 6];let ary3 = [...ary1, ...ary2];console.log(ary3)
将类数组或可遍历对象转换为真正的数组
const obj1 = {id: 1,age: 12
}
const obj2 = {gender: "男",job: "student"
}
const obj = { ...obj1, ...obj2 }
console.log(obj);

2.8 箭头函数

ES6中新增的定义函数的方式。

  // () => {} //():代表是函数; =>:必须要的符号,指向哪一个代码块;{}:函数体// const fn = () => {}//代表把一个函数赋值给fn

1.函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号

        // 1. 函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号// function fn() {//     console.log("hello");// }// fn()//es6写法// let foo = () => console.log("hello");// foo()

2.如果形参只有一个,可以省略小括号

    // 2.如果形参只有一个,可以省略小括号function fn1(v) {return v;}console.log(fn1(10));//es6写法var fn2 = v => v;console.log(fn2(20));

3.箭头函数遍历数组的方式

//3.使用箭头函数遍历数组的方式
var array = [1, 2, 3]
array.forEach((value, index) => console.log(value, index));

4.使用箭头函数注意事项:

  // 1.箭头函数中的this,取决于函数的定义,而不是函数的调用//箭头函数中不绑定this,箭头函数中的this指向是它所定义的位置,可以简单理解成,定义箭头函数中的作用域的this指向谁,它就指向谁function foo() {console.log(this);setTimeout(() => {console.log(this);}, 1000)}window.foo()//2.箭头函数不可以new// var Fn = () => {//     console.log(this)// }// var fn = new Fn()
面试题
var age = 100;var obj = {age: 20,say: () => {alert(this.age)}
}obj.say();//箭头函数this指向的是被声明的作用域里面,而对象没有作用域的,所以箭头函数虽然在对象中被定义,但是this指向的是全局作用域

2.9 String 的扩展方法

startsWith() 和 endsWith()
  • startsWith():表示参数字符串是否在原字符串的头部,返回布尔值
  • endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值
	  //startsWith  用....开始 返回值是true/false//endsWidth 以....结束 返回值是true/falselet str = 'Hello ECMAScript 2015';let r1 = str.startsWith('Hello');console.log(r1);let r2 = str.endsWith('2016');console.log(r2)
.repeat()

repeat方法表示将原字符串重复n次,返回一个新字符串

var string = "I love you\n"
var str = string.repeat(521)
console.log(str);
includes()
// includes  字符串中是否包含某个子串,返回值是true或者false
// 第一个参数表示要查找的字符 ,第二个参数表示从哪个位置开始查找
var string = '我爱你中国!';
console.log(string.includes('你', 0));
console.log(string.includes('她', 0));
var array = ['red', 'blue', 'cyan', 'yellow'];
console.log(array.includes('blue', 0));
模板字符串

ES6新增的创建字符串的方式,使用反引号定义

let name = `zhangsan`;
模板字符串中可以解析变量
let name = '张三'; 
let sayHello = `hello,my name is ${name}`; // hello, my name is zhangsan
模板字符串中可以换行
let result = {name: 'zhangsan',age: 20,sex: '男'
}
let html = `<div><span>${result.name}</span></div>
`
console.log(html);
在模板字符串中可以调用函数
const sayHello = function () { return '哈哈哈哈 追不到我吧 我就是这么强大';}; let greet = `${sayHello()} 哈哈哈哈`;console.log(greet); // 哈哈哈哈 追不到我吧 我就是这么强大 哈哈哈哈
//   字符串模板  ``反引号  ${这里放变量,表示式,或者函数}
var obj = {name: "李四",age: 18,sayHi(song) {return `我喜欢唱---------${song}`}
}
console.log(obj.sayHi(1));function fn() {var now = new Date()var hh = now.getHours()var mm = now.getMinutes()var ss = now.getSeconds()return `现在的时间是${hh}${mm}${ss}`
}
console.log(fn());

2.10 Set 数据结构

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构

const s = new Set();

Set函数可以接受一个数组作为参数,用来初始化。

const set = new Set([1, 2, 3, 4, 4]);//{1, 2, 3, 4}
实例方法
  • size 返回set长度
  • add(value):添加某个值,返回 Set 结构本身
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功
  • has(value):返回一个布尔值,表示该值是否为 Set 的成员
  • clear():清除所有成员,没有返回值
    const s1 = new Set();console.log(s1.size)//0const s2 = new Set(["a", "b"]);console.log(s2.size)//2const s3 = new Set(["a", "a", "b", "b"]);console.log(s3.size)//2const ary = [...s3];// ['a', 'b']console.log(ary)const s4 = new Set();// 向set结构中添加值 使用add方法s4.add('a').add('b');console.log(s4.size)//2// 从set结构中删除值 用到的方法是deleteconst r1 = s4.delete('b');console.log(s4.size)//1console.log(r1);//true// 判断某一个值是否是set数据结构中的成员 使用hasconst r2 = s4.has('d');console.log(r2)//fasle// // 清空set数据结构中的值 使用clear方法s4.clear();console.log(s4.size);//0// // 遍历set数据结构 从中取值const s5 = new Set(['a', 'b', 'c']);s5.forEach((value, index, s5) => console.log(value));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF数据分析题详解

目录 题目一(1.pcap) 题目二(2.pcap) 题目三(3.pcap) 题目四(4.pcap) CTF流量分析经典例题详解-CSDN博客 本文章涉及的所有题目附件下载地址&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/18mWo5vn1zp_XbmcQrMOKRA 提取码&#xff1a;hrc4 声明&#xff1a;这里…

WorkPlus AI助理为企业提供智能客服的机器人解决方案

在数字化时代&#xff0c;企业面临着客户服务的重要挑战。AI客服机器人成为了提升客户体验和提高工作效率的关键工具。作为一款优秀的AI助理&#xff0c;WorkPlus AI助理以其智能化的特点和卓越的功能&#xff0c;为企业提供了全新的客服机器人解决方案。 为什么选择WorkPlus A…

Python机器学习入门必学必会:机器学习与Python基础

1.机器学习常见的基础概念 根据输入数据是否具有“响应变量”信息&#xff0c;机器学习被分为“监督式学习”和“非监督式学习”。“监督式学习”即输入数据中即有X变量&#xff0c;也有y变量&#xff0c;特色在于使用“特征&#xff08;X变量&#xff09;”来预测“响应变量&…

【Python从入门到进阶】46、58同城Scrapy项目案例介绍

接上篇《45、Scrapy框架核心组件介绍》 上一篇我们学习了Scrapy框架的核心组件的使用。本篇我们进入实战第一篇&#xff0c;以58同城的Scrapy项目案例&#xff0c;结合实际再次巩固一下项目结构以及代码逻辑的用法。 一、案例网站介绍 58同城是一个生活服务类平台&#xff0c…

【分布式】分布式链路跟踪技术

为什么需要分布式链路追踪 提到分布式链路追踪&#xff0c;我们要先提到微服务。相信很多人都接触过微服务。微服务是一种开发软件的架构和组织方法&#xff0c;它侧重将服务解耦&#xff0c;服务之间通过API通信。使应用程序更易于扩展和更快地开发&#xff0c;从而加速新功能…

Go-gin-example 添加注释 第一部分 新建项目及api编写

文章目录 go-gin-example环境准备初始化 Go Modules基础使用 gin 安装测试gin是否引入 gin搭建Blog APIsgo-ini简述配置文件 阶段目标 编写简单API错误码包 完成一个demo初始化项目初始化项目数据库编写项目配置包拉取go-ini配置包在conf目录下新建app.ini文件&#xff0c;写入…

【操作系统篇】什么是分段和分页

什么是分段和分页 ✔️ 典型解析✔️分页✔️页表✔️分段&#xff08;Segmentation&#xff09;✔️ 分段和分页的区别✔️分页和分段哪个更耗资源✔️它们对性能的影响是怎样的✔️分段和分页分别适合什么场景 ✔️ 典型解析 在操作系统中&#xff0c;分段和分页是两种不同的…

在做题中学习(43):长度最小的子数组

LCR 008. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;同向双指针-------滑动窗口算法 解释&#xff1a;本是暴力枚举做法&#xff0c;因为全部是正整数&#xff0c;就可以利用单调性和双指针解决问题来节省时间 思路&#xff1a; 如上面图&am…

ES -极客学习

Elasticsearch 简介及其发展历史 起源 Lucene 于 Java 语言开发的搜索引擎库类创建于 1999 年&#xff0c;2005 年成为 Apache 顶级开源项目Lucene 具有高性能、易扩展的优点Lucene 的局限性 只能基于 Java 语言开发类库的接口学习曲线陡峭原生并不支持水平扩展原生并不支持水…

如何找到 niche 出海细分市场的 IDEA

先说结论就是&#xff1a;看榜单 Why&#xff1a;为什么看榜单&#xff1f; 大家会问为什么&#xff1f;原因很简单&#xff1a; 熟读唐诗三百首&#xff0c;不会作诗也会吟不天天看榜单上相关的优秀同行&#xff0c;你想干啥 心法就是下苦功夫坚持&#xff0c;量变引起质变…

Nginx 文件名逻辑漏洞(CVE-2013-4547)

目录 Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 1.cd到CVE-2013-4547 2.执行docker-compose up -d 3.查看靶场是否开启成功 4.访问浏览器 5.上传含有一句话木马的图片 6.burp抓包 7.在shell.gif加空格 8.放包 9.访问路径 10.继续抓包 11.在aa后面…

优化器(一)torch.optim.SGD-随机梯度下降法

torch.optim.SGD-随机梯度下降法 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR10(root./data, trainFalse, downloadTrue,transformtorchvision.transforms.ToTensor()) data…

2、Excel:基础概念、表格结构与常见函数

数据来源&#xff1a;八月成交数据 数据初探 业务背景 数据来源行业&#xff1a;金融行业&#xff08;根据应收利息和逾期金额字段来判断&#xff09; 可以猜测&#xff1a; 业务主体&#xff1a;某互联网金融公司&#xff08;类似支付宝&#xff09;也业务模式&#xff1a;给…

群晖安装MariaDB

群晖安装MariaDB 在套件中心安装MariaDB给root开启远程访问权限使用工具连接数据库 在套件中心安装MariaDB 给root开启远程访问权限 # ssh 登陆群晖后执行下面操作 $ mysql -uroot -p[数据库密码] $ use mysql; $ select User,authentication_string,Host from user; # 查看账…

【数据结构—排序—交换排序】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现&#xff1a; 1.2.1头文件的…

web前端开发技术复习问答题

目录 1.简述常见单标签和双标签有哪些&#xff1f; 2.常见块级元素和行级元素有哪些&#xff1f; 3.简述常见的列表有哪些&#xff1f;他们有什么区别&#xff1f; 4.简述超链接的href属性值如何设置&#xff1f;有什么区别 5.CSS基本语法 6. css中常见的引入方式有几种&…

程序员做私活赚外快的好地方,今天推荐几个

你们当程序员不会都拿着几千、万把块钱的死工资吧&#xff0c;今天为大家分享一些可以接私单的平台&#xff0c;我反正已经赚麻了。 如果你的工作相对没那么费时间&#xff0c;可以空闲的时候去接点私活。或者是还没有找工作之前&#xff0c;可以通过一些平台接一些兼职&#…

【STM32】PWR电源控制

1 PWR简介 PWR&#xff08;Power Control&#xff09;电源控制 PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上升到P…

回首2023,厉兵秣马,启航2024

目录 回首风波的20232023&#xff0c;感恩相遇暂停发文发文狂潮感恩有你备战2024学习之余跆拳道比赛做手工diy 学习心路年初学习伊始心路其后学习后来心路 必须看配图说明 未知的2024Flag 回首风波的2023 2023&#xff0c;感恩相遇 还记得&#xff0c;22年末&#xff0c;23年…

基于gitlab 12.8.0版本的完整镜像过程

目前已在一台服务器上安装了gitlab 12.8.0&#xff0c;并且稳定运行了有几年了&#xff0c;其上面也创建了大量的项目。目前要求对该gitlab及其上面的所有仓库做一个完整的镜像。具体操作过程如下&#xff1a; 1、确认现有的gitlab的版本号 2、到gitlab官网下载相同版本号的gi…