es5

Javascript 不可不知的秘密 -- Class 与 面向对象

元气小坏坏 提交于 2019-11-27 13:23:16
1.类对象的创建方式 new 关键字,通过调用 constructor()方法来创建对象 {} 直接赋值,这种格式中,最后一个属性后面如果有逗号,对于ES5是忽略的,大部分的ES3也是忽略的,IE中会报错(赞一个) Object.create(), es5 2. 类的属性 属性特性 可写(writable) : 可以设置,修改属性的数值 可枚举(enumerable) : 可以通过 for/in 循环 返回该属性 可配置(configurable) : 可以修改,删除属性本身的特性 类对象的特性 对象的原型prototype : 指向另外一个对象,本对象的属性继承自原型对象 对象的类 class : 标志对象类型的字符串 对象可扩展标记 extensible flag : 指明是否可以为对象添加新的属性(es5规范) 对象类别、属性类别 内置对象 (native object) 都是 ECMAScript规定的类,如Array,Function,Date,RegExp 宿主对象(host object) , 是由 JS 解释器嵌入的宿主环境,比如浏览器定义的一些列DOM对象 自定义对象(user-defined object) 是由 js代码创建的对象 自有属性 (own property) 是直接在对象中定义的属性 继承属性 (inherited property

ES6入门四:对象字面量扩展与字符串模板字面量

一笑奈何 提交于 2019-11-27 08:44:36
简洁属性与简洁方法 计算属性名与[[prototype]] super对象(暂时保留解析) 模板字面量(模板字符串) 一、简洁属性与简洁方法 ES6中为了不断优化代码,减低代码的耦合度在语法上下了很大的功夫,上一篇博客解构就是其中一种,在对象属性和方法名称上也有所优化,也就是这篇博客要解析的简洁属性和简洁方法。 什么是简洁属性呢?当通过字面量的方式声明对象时,属性名与赋值的变量名一致时,就可以采用简洁属性,示例: 1 //ES6的对象字面量简洁属性 2 var x = 2, y = 3, 3 obj = { 4 x, 5 y 6 }; 7 //ES5的编译结果 8 var x = 2, 9 y = 3, 10 obj = { 11 x: x, 12 y: y 13 }; 什么是简洁方法呢?当采用对象字面量的方式声明对象,可以省略方法的function字符,示例: 1 //ES6的对象字面量简洁方法 2 var obj = { 3 foo(){ 4 //... 5 }, 6 fun(){ 7 //... 8 } 9 } 10 //ES5的编译结果 11 var obj = { 12 foo: function foo() {//... 13 }, 14 fun: function fun() {//... 15 } 16 }; 但是简洁方法需要注意

ES6入门一:块级作用域(let&const)、spread展开、rest收集

微笑、不失礼 提交于 2019-11-27 05:02:59
let声明 const声明 块级作用域 spread/rest 一、let声明与块作用域 在ES6之前,JavaScript中的作用域基本单元就是function。现在有了let就可以创建任意块的声明,也被称为作用域块。这意味者只需要“{}”就可以创建一个作用域。不再像var声明变量那样总归属于包含函数或全局。例如: 1 var a = 2; 2 { 3 let a = 3 4 console.log(a); //3 5 } 6 console.log(a); //2 在相关的资料中看到有介绍,let声明在被正式列入标准之前长这样: 1 //这种写法不合法,可以理解它为let语法的前身 2 let (a = 2, b, c){ 3 //... 4 } 这种写法从语法设计角度来说被称为显示声明,也就是说声明一个作用域块,而现在{let a = 1;}这种写法被称为隐式声明,这种声明被称为作用域劫持。我想选择隐式的声明方式不是没有原因的,比如let在for中的应用: 1 var func = []; 2 for(let a = 0; a < 5; a++){ 3 func.push(function(){ 4 console.log(a); 5 }); 6 } 7 func[3](); //3 (如果for内使用var声明a,打印结果会是5)

ES6函数扩展

半腔热情 提交于 2019-11-26 23:35:41
前面的话   函数是所有编程语言的重要组成部分,在ES6出现前,JS的函数语法一直没有太大的变化,从而遗留了很多问题,导致实现一些基本的功能经常要编写很多代码。ES6大力度地更新了函数特性,在ES5的基础上进行了许多改进,使用JS编程可以更少出错,同时也更加灵活。本文将详细介绍ES6函数扩展 形参默认值   Javascript函数有一个特别的地方,无论在函数定义中声明了多少形参,都可以传入任意数量的参数,也可以在定义函数时添加针对参数数量的处理逻辑,当已定义的形参无对应的传入参数时为其指定一个默认值 【ES5模拟】   在ES5中,一般地,通过下列方式创建函数并为参数设置默认值 function makeRequest(url, timeout, callback) { timeout = timeout || 2000; callback = callback || function() {}; // 函数的剩余部分 }   在这个示例中,timeout和callback为可选参数,如果不传入相应的参数系统会给它们赋予一个默认值。在含有逻辑或操作符的表达式中,前一个操作数的值为false时,总会返回后一个值。对于函数的命名参数,如果不显式传值,则其值默认为undefined   因此我们经常使用逻辑或操作符来为缺失的参数提供默认值   然而这个方法也有缺陷

ES6 基础

你说的曾经没有我的故事 提交于 2019-11-26 23:35:24
一、新的变量声明方式 let/const 与var不同,新的变量声明方式带来了一些不一样的特性,其中最重要的两个特性就是提供了块级作用域与不再具备变量提升。 通过2个简单的例子来说明这两点。 { let a = 20; } console.log(a); // a is not defined 而这个简单的例子,会被编译为: { let _a = 20; } console.log(a); // a is not defined // ES5 console.log(a); // undefined var a = 20; // ES6 console.log(a); // a is not defined let a = 20; 变量提升demo示例 当然,你的代码编译成为了ES5之后,仍然会存在变量提升,因此这一点只需要我们记住即可。在实际使用中,也需要尽量避免使用变量提升的特性带来的负面影响。只有在面试题中,才会对变量提升不停的滥用。 使用ES6,我们需要全面使用let/const替换var,那么什么时候用let,什么时候用const就成为了一个大家要熟练区分的一个知识点。 我们常常使用let来声明一个值会被改变的变量,而使用const来声明一个值不会被改变的变量,也可以称之为常量。 当值为基础数据类型时,那么这里的值,就是指值本身。 而当值对应的为引用数据类型时

ES6笔记之参数默认值(译)

て烟熏妆下的殇ゞ 提交于 2019-11-26 22:46:19
原文链接: http://dmitrysoshnikov.com/ 原文作者:Dmitry Soshnikov 译者做了少量补充。 这样的的文字是译者加的,可以选择忽略。 作者微博: @Bosn 在这个简短的笔记中我们聊一聊ES6的又一特性:带默认值的函数参数。正如我们即将看到的,有些较为微妙的CASE。 ES5及以下手动处理默认值 在ES6默认值特性出现前,手动处理默认值有几种方式: function log(message, level) { level = level || 'warning'; console.log(level, ': ', message); } log('low memory'); // warning: low memory log('out of memory', 'error'); // error: out of memory 为了处理参数未传递的情况,我们常看到typeof检测: if ( typeof level == 'undefined' ) { level = 'warning' ; } 有时也可以检查arguments.length if (arguments.length == 1 ) { level = 'warning' ; } 这些方法都可以很好的工作,但都过于手动且缺少抽象。ES6规范了直接在函数头定义参数默认值的句法结构

webpack e6转化成es5 配置方法

≡放荡痞女 提交于 2019-11-26 16:05:36
https://www.jianshu.com/p/ce28ceddda72 上面是人家大神的地址, 写的明明白白:我觉得自己不会比他写的更详细了 补充一点就是:一定要注意babal的版本不能超过8.0 否则会报错, 至于8.0怎么用, 我也不知道. 很纠结. babel-core和babel-preset-ev要严格按照人家的版本下载. 我整了好久就是因为现在的版本问题与大神当时的版本不一样. 这个大神是位数不多的写自己版本的. 用webpack, 一切不表明版本的包都像是枕边的空口承诺, 白扯! webpack 是一个木工的 电锯一样, 开关一按咱就可以愉快的开工, 该锯木头锯木头, 但是这个电锯不行, 开工前, 得给他繁琐的配置配置, 从哪里放木头,从哪里出木头, 出来啥样的木头用啥配置. 每一步都需要配置哟, 否则它剧出来木头,按不到门上, 只能烧火用.你说怪不怪?! 对,就是这么操蛋 webpack 这种不关乎业务逻辑和js基础知识的东西, 可以说它会不会用不关乎你的htmlcssjs三大基础知识扎实程度,但是还是经常令人抓狂. 为什么: 1. 不是中国人整出来的东西, 文档就难读懂. 2, 虽然它也越来越追求自动化, 但是很多没给配置好, 比如说es6转换成es5 , 你本来知道需要, 就是不给整上自动化配置, 如果是我编写webpack, 我会加上一个选项{ es5:

微信小游戏的环境搭建

五迷三道 提交于 2019-11-26 01:59:25
笔记内容:微信小游戏的环境搭建 笔记日期:2018-02-01 下载官方工具 首先需要去微信公众平台下载官方的开发工具,官网的下载地址: https://mp.weixin.qq.com/debug/wxagame/dev/devtools/devtools.html 下载开发工具: 下载完成后就安照提示,一步步安装就可以了,安装很简单这里就不赘述了。 然后最好有一个编码体验更友好的IDE,比如WebStorm、HBuild、Sublime等,我们这里用的是WebStorm。官方的开发工具很很很难用,所以我们一般只用于调试,不用于编码。 下载好后,我们先来创建一个小游戏的模板项目: 我这里选择的是无Appid: 然后选择一个项目目录进行创建: 可以看到会创建一个小游戏的模板: 如果你不要这个模板,就在创建时项目时不勾选那个选项即可。 然后在WebStorm中打开这个小游戏工程: 如上,可以看到,WebStorm不认识这些代码,所以报语法错误,这是因为WebStorm默认的js代码是ES5的标准,而这里的js代码是ES6的,所以我们需要设置js代码为ES6的标准,打开setting界面进行设置: 保存设置后就不报错了: 但是这时候WebStorm会提示,是否让文件监视器使用babel将ES6格式的代码转换为ES5: 所以我们还需要安装node和babel等前端工具链。