随笔分类 -  ECMAScript

ES5 的 setter 和 getter
摘要:有两种方式使用 setter 和 getter 1. set/get 2. Object.defineProperty 当然,通常用 setter 和 getter 来实现私有变量 或者 当然,setter 和 getter 最牛逼的用处是用来实现目前流行的 “双向绑定”,MVxx之类的库。不支持  阅读全文

posted @ 2016-03-17 07:28 snandy 阅读(3511) 评论(0) 推荐(1) 编辑

ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
摘要:前面提到 ES5 对象属性描述符,这篇看看对象的扩展、密封和冻结。 阻止对象扩展,让一个对象变的不可扩展,也就是永远不能再添加新的属性 ES3 是没有办法阻止对象扩展的,定义对象后可以给对象添加任意属性,如 ES5 的 Object.preventExtensions 则可以阻止给对象添加新属性 如 阅读全文

posted @ 2016-03-16 07:18 snandy 阅读(9064) 评论(1) 推荐(5) 编辑

ES5 数据属性描述符和存取描述符
摘要:一、数据属性描述符 对象是一个属性集合,对象的基本特征是属性名(name)和属性值(value)。ES5 增加了属性描述符,可以更细腻的控制属性的不同操作。属性描述符有 configurable、writable 和 enumerable。 属性描述符通常和 Object.definePropert 阅读全文

posted @ 2016-03-15 07:32 snandy 阅读(4114) 评论(1) 推荐(2) 编辑

Object.observe将不加入到ES7
摘要:先请看 Object.observe 的 API Object.observe(obj, callback[, acceptList]) 它用来监听对象的变化,当给该对象添加属性,修改属性时都会被依次记录下来 看一个示例 var person = {} Object.observe(person, 阅读全文

posted @ 2016-03-04 09:31 snandy 阅读(1667) 评论(1) 推荐(0) 编辑

JavaScript中产生标识符方式的演变
摘要:本文记录下JS中产生标示符方式的演变,从ES5到ES6,ES5及其之前是一种方式,只包含两种声明(var/function),ES6则增加了一些产生标识符的关键字,如 let、const、class。一、ES5时代varfunction我们知道 JS 不象其它语言 Java、Ruby等,它用来命名变... 阅读全文

posted @ 2015-06-12 07:13 snandy 阅读(2085) 评论(1) 推荐(0) 编辑

JavaScript中变量提升是语言设计缺陷
摘要:首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确。因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用。它允许... 阅读全文

posted @ 2015-06-11 06:46 snandy 阅读(5960) 评论(10) 推荐(3) 编辑

ES6 Map/WeakMap
摘要:JS的对象本身就是个键值结构,ES6为什么还需要加Map呢,它与普通的JS对象有何区别?一、Map1. Map构造器先看Map的简单用法// 字符串作为key, 和JS对象类似var map = new Map()// setmap.set('name', 'John')map.set('age',... 阅读全文

posted @ 2015-05-22 08:05 snandy 阅读(7016) 评论(0) 推荐(2) 编辑

ES6 Set/WeakSet
摘要:ES6里加入了一个新数据解构Set,和Java的Set一样,它里面不存放重复的元素。Set实现为一个类,使用时需要先new。var s1 = new Set()s1.add(1)s1.add(2)s1.add(3)s1.add(1)var s2 = new Set()s2.add('a')s2.ad... 阅读全文

posted @ 2015-05-14 17:26 snandy 阅读(2363) 评论(3) 推荐(0) 编辑

ES6块级作用域及新变量声明(let)
摘要:很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域。用var声明的变量具有变量提升(declaration hoisting)的效果。ES6里增加了一个let,可以在{}, if, for里声明。用法同var,但作用域... 阅读全文

posted @ 2015-05-10 11:02 snandy 阅读(15944) 评论(2) 推荐(1) 编辑

ES6新增值比较函数Object.is
摘要:在这之前我们比较值使用两等号 “==” 或 三等号“===”, 三等号更加严格,只要比较两方类型不同立即返回false。另外,有且只有一个值不和自己相等,它是NaN现在ES6又加了一个Object.is,让比较运算的江湖更加混乱。多数情况下Object.is等价于“===”,如下1 === 1 //... 阅读全文

posted @ 2015-05-07 16:30 snandy 阅读(5291) 评论(4) 推荐(2) 编辑

ES6函数剩余参数(Rest Parameters)
摘要:我们知道JS函数内部有个arguments对象,可以拿到全部实参。现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数(废话好多 O(∩_∩)O~)。这个新的对象和arguments不一样,它是程序员自定义的一个普通标识符,只是需要在前面加上三个点:...function fu... 阅读全文

posted @ 2015-05-07 08:11 snandy 阅读(17220) 评论(4) 推荐(5) 编辑

ES6函数默认参数(Default Parameters)
摘要:语言更新时每一个新增的特性都是从千百万开发者需求里提取过来的,规范采用后能减少程序员的痛苦,带来便捷。我们经常会这么写function calc(x, y) { x = x || 0; y = y || 0; // to do with x, y // return x/y}... 阅读全文

posted @ 2015-05-05 10:54 snandy 阅读(14279) 评论(0) 推荐(2) 编辑

ES6箭头函数(Arrow Functions)
摘要:ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器)。一、语法1.具有一个参数的简单函数var single = a => asingle('hello, world') // 'hello, world' 2.没有参数的需要用在箭头前加上小括号var log = ... 阅读全文

posted @ 2015-04-08 18:00 snandy 阅读(57913) 评论(5) 推荐(10) 编辑

JavaScript中的直接量与初始器的区别
摘要:很多代码优化及公司规范都会提到写对象不应该var obj = new Object()而应该var obj = {}写数组不应该var arr = new Array()而应该var arr = []很多书籍《JavaScript高级程序设计》《JavaScript权威指南》也建议使用对象、数组直接量而别使用new方式。这里就引出了直接量(Literals)的概念。ES1(1997.6)规定的直接量有四种:Null、Boolean、Numeric、StringES2(1998.8)规定的直接量和ES1相同到了ES3(1999.12),则加入了正则表达式直接量(Regular Expressio 阅读全文

posted @ 2013-11-24 12:31 snandy 阅读(3684) 评论(2) 推荐(5) 编辑

ES5严格模式(Strict mode)
摘要:严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,第五版发布于2009年12月。旨在改善错误检查功能并且标识可能不会延续到未来JavaScript版本的脚本。ES5严格模式是限制性更强的JavaScript变体,它与常规JavaScript的语义不同,其分... 阅读全文

posted @ 2013-11-19 10:36 snandy 阅读(11552) 评论(2) 推荐(9) 编辑