当前位置: 首页 > news >正文

JS-09-es6常用知识1

目录

1  模板字符串

1.1 模板字符串基本用法

1.2 模板字符串解决了一些痛点

2 解构赋值

2.1 对象的解构赋值

2.2  函数参数的解构赋值

2.3 补写:属性的简写

3  rest参数

3.1 arguments

3.2 rest参数

3.3 补充:判断数据类型

4 箭头函数

4.1 用法

4.2 箭头函数和普通匿名函数有哪些不同?

 5 指向window

6  global和window的区别


1  模板字符串

模板字符串就是一种字符串的新的表现形式

1.1 模板字符串基本用法

var s1 = `abc`

1.2 模板字符串解决了一些痛点

1、字符串拼接

    var s3 =" a " + s1 + " b " + s2;    //普通字符串拼接var s4 = ` a ${s1} b ${s2}`;        //模板字符串,减少了错误几率

2、字符串换行

    var s5 =`<div><p><span>123</span></p><p>${s2}</p><p>${s3}</p><p>${s1}</p></div>`;console.log(s5);

2 解构赋值

节省代码量,简化代码

2.1 对象的解构赋值

    var obj={name:"张三",age:18}var {name,age}=obj; //生成2个变量,//  name值来自于obj.name、//  age值来自于obj.agevar {name:title}=obj;//生成一个变量:title,值来自于obj.namevar {name:title,age:title1}=obj;   //相当于给obj里的变量在外面取了别名

2.2  函数参数的解构赋值

    function f1(obj){  //未解构console.log(obj.age);console.log(obj.height)}//等价于function f1({ age,height }){ //解构//创建了age、height两个局部变量,值来自于实参//这样写代码又节省了一些字符console.log(age);console.log(height)}f1({age:5,height:180}) //调用函数

2.3 补写:属性的简写

    var a = 3 ; var c = 10;var b = { a,c } ;   //b对象有一个a属性,a属性的值,来自于a变量  ,//还有一个c属性,c属性的值来自于c变量console.log(b)

3  rest参数

使用背景:es6的

优点:arguments是伪数组,而rest参数是真数组

3.1 arguments

arguments是函数内部的一个局部变量,
arguments.length表示函数的实参的个数

    function fn() {console.log(arguments.length);for (var i = 0; i < arguments.length; i++) {console.log(arguments[i]);}}fn(1, 3, 5)       //3fn("a", "b", "c", "d", "e") //5

3.2 rest参数

  es6箭头函数内部不能使用arguments,为了弥补这个问题,rest参数应孕而生

    //...args就是rest参数//-->产生了一个变量,这个变量是一个数组,数组里面包含了这个函数调用时传递的所有实参function q(...args) {//验证args是不是数组?console.log(args instanceof Array);//trueconsole.log(Object.prototype.toString.call(args));//"[object Array]"console.log(Array.isArray(args));   //true es5中的新方法console.log(args);}q(1, 3, 5);q(2, 3, 4, 5, 6, 7, 8);

3.3 补充:判断数据类型

1、typeof:typeof只能判断:数字、字符串、布尔值、undefined、函数

2、Object.prototype.toString.call()

  •      5  '[object Number]'
  •     "abc" '[object String]'
  •      true '[object Boolean]'
  •      null '[object Null]'
  •      undefined '[object Undefined]'
  •      [1,3,5] '[object Array]'
  •      function(){}  '[object Function]'
  •      new Date()   '[object Date]'
  •      /abc/        '[object RegExp]'

3、Array.isArray()  es5中提出来的检测数组

4、 isNaN()  

5、 isInfinity()

4 箭头函数

场景:用于替换匿名函数

4.1 用法

 1:基本用法

    //匿名函数div.onclick=function(){console.log("你好")}//箭头函数div.onclick=()=>{console.log("你好")}

2:有一个参数的箭头函数

    var fn=(a)=>{console.log("abc");}//等价于:var fn=a=>{console.log("abc");}

3 有2个及更多参数的箭头函数

切记:()不能省略

    var f=(a,b,c)=>{console.log("abc")}

4.2 箭头函数和普通匿名函数有哪些不同?

1、函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

2、不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

3、不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

4、(不常用)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。 generator函数现在经常用async替代

普通的匿名函数,或者说具名函数,都可以决定函数内部的this值,而箭头函数不可用

<script>var p={age:18,//es6中对象方法的箭头函数表示形式run:()=>{setTimeout(()=>{//this:windowconsole.log(this);//this是window},100)},travel:function(){//this:psetTimeout(()=>{console.log(this);//this是p},100)},//推荐使用的方式☆☆☆:es6中对象方法的简写形式say(){console.log("say方法中的this:",this);setTimeout(()=>{console.log("say内部的延迟函数:",this);//this是p},100)},}p.run();p.travel();p.say();
</script>

 5 指向window

    在 jQuery 的 $.ajax 方法中,直接使用 this 关键字在 success 回调函数中通常不会指向你期望的上下文(比如调用 $.ajax 的对象或者某个特定的 DOM 元素)。这是因为 JavaScript 的回调函数通常改变了 this 的上下文,除非你显式地绑定它。 

   在 $.ajax 的 success 回调函数中,this 通常指向全局对象(浏览器中通常是 window)。这是因为当你调用一个回调函数时,除非你明确地设置了它的 this 值(例如使用 .call().apply(), 或者箭头函数),否则 this 将默认指向全局对象。

$.ajax({success:function(){console.log(this);        //window}
})

    在 JavaScript 中,当你使用普通的函数(非箭头函数)作为回调,并且这个函数是在没有显式指定上下文(即没有使用 .call().apply(), 或 .bind() 方法)的情况下被调用的,那么 this 的值通常是全局对象(在浏览器中是 window)。

[1,3,5].map(function(){console.log(this);      //window
})

6  global和window的区别

global是es中全局作用域中的根对象

  • 但是nodejs里面,global全是表示全局变量的载体
  • 浏览器端的js里面,全局变量都放在了window中,浏览器中不存在global对象

相关文章:

  • NVIDIA Technologies
  • Spring Boot(七十四):集成Guava 库实现布隆过滤器(Bloom Filter)
  • java学习路径
  • MATLAB基础应用精讲-【数模应用】联合分析
  • 【LINUX】LINUX基础(目录结构、基本权限、基本命令)
  • SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
  • ES脚本启动报错修改
  • C++常用算法函数
  • 【数智化人物展】合思创始人兼CEO马春荃:数字化工具,帮助企业挖出更多净利润...
  • OpenSSL自签名证书
  • 力扣刷题总结 -- 数组24
  • @Transactional事务注解内含乾坤?
  • Shell的简单介绍(1)
  • “开源与闭源:AI大模型发展的未来之路“
  • 计算机网络学习笔记——网络层(b站)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【Amaple教程】5. 插件
  • Android单元测试 - 几个重要问题
  • Android系统模拟器绘制实现概述
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript的使用你知道几种?(上)
  • js如何打印object对象
  • Linux中的硬链接与软链接
  • node-glob通配符
  • Promise面试题2实现异步串行执行
  • Python十分钟制作属于你自己的个性logo
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring Boot MyBatis配置多种数据库
  • vue自定义指令实现v-tap插件
  • 从零搭建Koa2 Server
  • 基于web的全景—— Pannellum小试
  • 两列自适应布局方案整理
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 源码安装memcached和php memcache扩展
  • 云大使推广中的常见热门问题
  • Java数据解析之JSON
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ###项目技术发展史
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • ()、[]、{}、(())、[[]]命令替换
  • (1)虚拟机的安装与使用,linux系统安装
  • (层次遍历)104. 二叉树的最大深度
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (六)软件测试分工
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)