es5

[译]ES6特性

一个人想着一个人 提交于 2020-02-24 22:55:27
原文 作用域 使用 let / const 替代 var 。 var 有什么错? var 说明的变量会产生作用于提升的概念。 ES5: var x = 'outer'; function test(inner) { if (inner) { var x = 'inner'; // scope whole function return x; } return x; // gets redefined because line 4 declaration is hoisted } test(false); // undefined 😱 test(true); // inner test(false) 返回的是 undefined 而不是 outer 。 为什么? 因为if-block没有执行,第四行的 var x 被提升了。 提升后,上面的代码变成了下面的样子: var x = 'outer'; function test(inner) { var x; // 提升到了 if (inner) { x = 'inner'; // 初始化没有提升 return x; } return x; } ES6中可以这样解决这个问题: let x = 'outer'; function test(inner) { if (inner) { let x = 'inner'; return x; }

javascript ES5 模块化 CommonJs AMD require加载模块

点点圈 提交于 2020-02-22 06:30:45
什么是模块化 模块化其实是一种规范,一种约束,这种约束会大大提升开发效率。将每个js文件看作是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容。 按照js模块化的设想,一个个模块按照其依赖关系组合,最终插入到主程序中。 模块化的方法 普通方法 优点:可以直接调用。 缺点:变量可能会出现重复造成的污染,并且无法进行结构性分类。 function a ( ) { console . log ( "a" ) ; } function b ( ) { console . log ( "b" ) ; } a ( ) ; b ( ) ; 对象的写法 优点:变量不会被直接污染,并且易于分类描述内容。 缺点:会暴露所有成员,内部状态可以被外部改写。 var obj = { _a : false , a : function ( ) { console . log ( "a" ) ; } , b : function ( ) { console . log ( "b" ) ; } } ; obj . a ( ) ; obj . b ( ) ; obj . _a = 3 ; 立即执行函数 优点:外部代码无法读取到里面的_num变量,保证了变量不被污染。 var obj = ( function ( ) { var _num = 3 ; return { a :

组件封装:es6转es5

微笑、不失礼 提交于 2020-02-22 00:12:27
1、先全局安装babel-cli,输入命令 npm install babel-cli -g 2、输入 cd d:\es6 ; ---进入文件夹路径 3、输入 npm init ; 一路回车键 ---(引导你创建一个package.json文件,包括名称、版本、作者这些信息等) 4、输入 npm install --save-dev babel-cli ; ---(安装命令行转码babel-cli工具) 5、es6文件里新建配置文件.babelrc 复制代码 { "presets": [], "plugins": [] } 粘贴到.babelrc 里 6、命令行窗口输入 npm install --save-dev babel-preset-es2015 ;---(安装es2015依赖项) 将"es2015"加入.babelrc { "presets": ["es2015", "react", "stage-0"], "plugins": [] } 7、输入 babel -h 检测是否安装成功 8、将es6编译成es5 例如: babel es6.js -o es5.js 9、压缩代码 sudo npm install uglify-js -g : 压缩代码 uglifyjs es5.js -o es5-min.js /*--> */ /*--> */ 来源: https:/

JS中 undefined重写 与 void 0

戏子无情 提交于 2020-02-20 11:42:29
在看一些开源源码的时候经常会看到这样一个判断句: if( xxx !== void 0 ) {} 这里的目的是判断指定的变量是不是一个 undefined 之所以这么写,是因为,在ES5之前,undefined 是可以被重写的,在ES5之后修复了这个问题,但只是全局作用域下不可以了,在局部作用域内依然可以改写,比如: (function() { var undefined = 10; console.log(undefined); // 10 console.log(typeof undefined) // number })() void 后面不管跟的什么,返回的都是 undefined 来源: https://www.cnblogs.com/xwant/p/8985502.html

JavaScript数组

核能气质少年 提交于 2020-02-19 04:34:16
JavaScript数组 一、数组是什么 所谓数组,是有序的元素序列。若将多个类型的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。是一组数据的组合,多个数据的集合。数组是一种特殊的对象。 二、数组的特点 1.数组内的数据有一些相关性的。 2.数组里的数据有一定的顺序。 3.数组里面可以放任何的数据类型,也可同时存放不同类型的数据。 4.任意数组之间都不相等,哪怕数组内的数据相同也不相等。数组是一种特殊的对象 Tip:js中任何两个对象都不相等,只要相等了,那就是同一个对象,相等于自身 三、创建数组 1.字面量方法创建 var arr = [1,2,3]; 2.构造函数创建 var arr = new Array[]; //构造函数方法创建时,若括号内只有一个数值型数据,则表示这个数组中有几个元素,值为undefined //两种方法的不同 //例: var arr1 = [5] //表示有一个数组元素5 var arr2 = new Array(5) //表示有5个数组元素,值全部为undefined 四、数组简单分类 //数值数组 var arr = [3,4,5,6]; //字符数组 var arr = ["a","b","c","d"]; //数组数组(二维数组,多维数组) var arr

ES5 Object.defineProperty 方法

旧时模样 提交于 2020-02-18 20:08:54
先看一个例子: var o = {}; o.a = 1; // 等待于: Object.defineProperty(o, 'a', { value: 1, writable: true, configurable: true, enumerable: true }); Object.defineProperty(o, 'a', { value: 1 }); // 等待于: Object.defineProperty(o, 'a', { value: 1, writable: false, configurable: false, enumerable: false }); 下面详细描述这些参数的意义: configurable false(默认) true 1) 对象的描述可以修改或者增加, 描述包括 configurable enumerable set get value 2) obj.b 是可以删除的, delete(obj.b); 下面的例子设置为 false 以后, 再设置 上面的那些属性都会报错。 var o = {} Object.defineProperty(o, 'b', { configurable: false }); Object.defineProperty(o, 'b', { configurable: true }); // thrown error

ES5 object方法整理

試著忘記壹切 提交于 2020-02-17 08:49:41
Object.getPrototypeOf(object):调用对象父类原型上的方法; function Person(){ this.method1 = function(){alert(1)} } Person.prototype.method2 = function(){alert(2);} function Man(){ this.m1 = function(){ Object.getPrototypeOf(this).method1(); } } Man.prototype = new Person(); Man.prototype.m2 = function(){ Object.getPrototypeOf(this).method2(); } var man = new Man(); man.m1(); man.m2(); Object.getOwnPropertyDescriptor(object, propertyname):获取对象中属性的ECMAScript对象; var obj = {}; obj.a = "abc"; var descriptor = Object.getOwnPropertyDescriptor(obj, "a"); for(var prop in descriptor){ document.write(prop + ': ' +

ES5基础

拥有回忆 提交于 2020-02-04 05:37:43
作用域链:先在最小环境内查找有无想要的变量对象,如果有则使用本函数环境内的变量对象(要是在申明变量对象前调用则是undefind),如果没有则到更大一级的环境中查找,一直延续到全局环境。 引用类型 1.Object 对象 : var person = { } ; // 与 new object() 相同。 for-in:枚举对象“键名”,但是无序的。 2.Array 数组 : var names=[ ];//创建一个新的数组 数组的每一项可以保存任何数据类型的数据 .join():只接受一个参数,这个参数将作为该数组每个元素之间的分隔符,返回包含所有数组项的字符串。(不会改变原数组) var arr = [ 1 , 2 , 3 ] arr . join ( ) // "1,2,3" 如果不含参数,默认为逗号。 arr . join ( "_" ) // "1_2_3" 栈方法 1.push():入栈,可以接收任意数量的参数,把它们逐个添加到数组末尾(栈顶),返回修改后的数组长度。 2.pop():出栈。从数组末尾(栈顶)移除最后一项,减少数组的length,返回移除的项。 队列方法 1.shift():出队。移除数组的第一项并返回该项,长度减1。 2.unshift():数组头部添加任意个项,并返回新数组的长度。 排序 1.reverse():反转数组中元素的顺序。( 会改变原数组

es5继承与es6继承

可紊 提交于 2020-02-03 03:54:15
es5中的继承方式: 1. 原型链继承 缺点:1. 创建实例时无法像父类构造函数传递参数; 2. 因为指定了原型,所以不能实现多继承; 3. 父类构造函数上的属性被所有子类共用,给原型上的属性赋值会改变其他子类的属性值; // es5 const Parent = function (name, age) { this.name = name this.age = age } Parent.prototype.sayName = function () { console.log('My name is ' + this.name) } function Child (sex) { this.sex = sex } /* Child.prototype = new Parent() let p1 = new Child('Json') p1.sayName() // console.log('my name is ', p1.name) let p2 = new Child('Ketty') p2.sayName() // My name is undefined // My name is undefined */ /** Child.prototype = new Parent('Cole') let p1 = new Child('Json') p1.sayName()

ES6的十大特性和认知

我与影子孤独终老i 提交于 2020-01-30 04:32:36
---恢复内容开始--- ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率。 本文主要针对ES6做一个简要介绍。 也许你还不知道ES6是什么, 实际上, 它是一种新的javascript规范。在这个大家都很忙碌的时代,如果你想对ES6有一个快速的了解,那么请继续往下读,去了解当今最流行的编程语言JavaScript最新一代的十大特性。 以下是ES6排名前十的最佳特性列表(排名不分先后): Default Parameters(默认参数) in ES6 Template Literals (模板文本)in ES6 Multi-line Strings (多行字符串)in ES6 Destructuring Assignment (解构赋值)in ES6 Enhanced Object Literals (增强的对象文本)in ES6 Arrow Functions (箭头函数)in ES6 Promises in ES6 Block-Scoped Constructs Let and Const(块作用域构造Let and Const) Classes(类) in ES6 Modules(模块) in ES6。 这里只列出了10条比较常用的特性。