摘要:
时间到了2015年6月18日,ES6正式发布了,到了ES6,前面的各种模拟类写法都可以丢掉了,它带来了关键字 class,constructor,set,get,extends,super。 ES6的写类方式 // 定义类 Person class Person { constructor(name
阅读全文
摘要:本文分为三个部分 一、JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 Firebug 这真不是 Firebug 的问题,可以用alert试试 (哈哈开玩笑)。 看看Java的运算结果 再看看Python 2. 大整数运算 Firebug 16位和17位数竟然相等,没天理啊。 又如 看结果
阅读全文
摘要:写组件时有时想把一些组件特性相关的 CSS 样式封装在 JS 里,这样更内聚,改起来方便。JS 动态插入 CSS 两个步骤就可以创建一个 style 对象使用 stylesheet 的 insertRule 或 addRule 方法添加样式一、查看样式表先看下 document.styleSheet...
阅读全文
摘要:本文记录下JS中产生标示符方式的演变,从ES5到ES6,ES5及其之前是一种方式,只包含两种声明(var/function),ES6则增加了一些产生标识符的关键字,如 let、const、class。一、ES5时代varfunction我们知道 JS 不象其它语言 Java、Ruby等,它用来命名变...
阅读全文
摘要:首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确。因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用。它允许...
阅读全文
摘要:这是由小习发的一个问题引起的讨论,结束后大家各自加深了多parseFloat的理解。如下16进制数0x10使用parseFloat转成数字,结果为0。潜意识期望的结果是16。有人说脑残,16进制数为什么要用parseFloat,因为16进制不分int和float(那是10进制的事)。的确是这样,实际...
阅读全文
摘要:在写日历组件和旅行相关频道开发的过程中,很多需要地方需要和日期对象打交道。拿京东旅游首页来说, 左上角的搜索框就包含了许多日期相关的交互逻辑,它包含了机票,酒店,度假等,这些都含有出发日期,到达日期等。 里面还包含了一个日期组件,在用户选择完出发日期后,会自动把到达日期定位在出发日期的下一天。 又如
阅读全文
摘要:以前记录了一篇将光标定位于输入框最右侧的实现方式 ,实现光标定位在文本的最末。这种需求往往在修改现有的文本。有时可能还需要把光标定位在首位,或者中间某个位置,这就需要实现一个更通用的方法。这个方法setCursorPosition需要使用两个原生APIsetSelectionRangecreateT...
阅读全文
摘要:1. 跨子域的iframe高度自适应2. 完全跨域的iframe高度自适应同域的我们可以轻松的做到1. 父页面通过iframe的contentDocument或document属性访问到文档对象,进而可以取得页面的高度,通过此高度值赋值给iframe tag。2. 子页面可以通过parent访问到父...
阅读全文
摘要:引子父页面里控制子页面子页面里控制父页面一、引子我们先看一个示例,有两个页面,1.html通过iframe嵌入2.html,两个页面都是同域的1.html 1.html 2.html,很多P元素将高度撑高一些 2.html 这是一个i...
阅读全文
摘要:之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer)。JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的double类型一样。但实际操作中比如数组索引、位操作则是基于32位整数。方式一、使用取余运算符判断任何...
阅读全文
摘要:typeof是一个运算符,它对操作数返回的结果是一个字符串,有6种(只针对ES,不包含HOST环境对象)'undefined''boolean''string''number''object''function'因为它本身是运算符,它不是函数,使用时没必要加个小括号if (typeof(obj) === 'undefined') { // ...}typeof用来判断类型,它有几个坑1. 对null返回是'object',你却不能真正当对象使用var obj = nu
阅读全文
摘要:通常在以下语句结构中需要判断真假if分支语句while循环语句for里的第二个语句如if (boo) { // do something}while (boo) { // do something}JavaScript中有 6 个值为“假”,这六个值是falsenullundefined...
阅读全文
摘要:我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是number类型function isNumber(obj) { return typeof obj === 'number'}这个函数对于整数和浮点数都没有问题,但对于NaN值也返回true这让人感到不爽,毕竟用isNumber判断通过后谁也不会用NaN去做算术运算。那改进一下,用Object.prototype.toString试试function isNumber(obj) { return Object.prototype.toString.call(obj) ===
阅读全文
摘要:JS提供了一些内置对象、函数和构造器供我们编程,如Math、parseInt、Object、Array等。这些都是可见的,编程时可以使用的。比如我可以new Object 或 new Array。有一些则是不可见的,这些对象只能由引擎在特殊的情形提供。这些类型的对象往往还被消减了一些功能。下面列举一些一、Arguments 类型Arguments 类型 不能由程序员手动创建其对象,即你不能 new Arguments() 。 它有且仅有一个对象argumentsfunction func() { console.log(arguments[0]) // 1 console....
阅读全文
摘要:全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f 范围内的一个32位十六进制数。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软
阅读全文
摘要:点号「.」在JavaScript中有两种语义语义1、表示算术中的小数点(浮点数),如 2.5语义2、取对象属性、方法,如 [].push(2)这几乎没有任何难理解的地方,但下面这个问题则很有趣。// 这行代码会如何执行1.toString();Firebug 中如下这里的点号表达的是上述的语义1,因此点号后面必须跟一个数字,这里跟的是toString,报语法错了。解决方法很简单,如加个小括号(1).toString();还可以这么写,但难理解些1..toString();之所以浏览器中都能运行,是因为各浏览器JS引擎都把“1..toString()”理解成了 “1.0.toString()”。
阅读全文
摘要:Backbone是一个优秀的前端MVC库,它的代码质量必定可靠。阅读过程中发现了函数triggerEvents有点意思,初看会以为一些代码是多余的。var triggerEvents = function(events, args) { var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; switch (args.length) { case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return...
阅读全文
摘要:ES3中,delete在8.6.2.5及11.4.1有介绍,如下有一些信息,1、实现上delete操作符会调用引擎内部的[[Delete]]方法2、[[Delete]]在8.6.2里定义3、删除的属性有个DontDelete的特性,如果有,delete时直接返回false搜索“DontDelete”,会发现有很多,如下都不能delete1, 激活对象的arguments对象 (10.1.6)function func() { delete arguments; alert(arguments);}func(1);2,变量声明 (10.2.1)var a = 10;delete a;alert(
阅读全文
摘要:我们知道 instanceof 运算符用来检查对象是否为某构造器的实例。下面列举它返回true的各种情景。1、对象obj是通过new Constructor创建的,那么obj instanceof Constructor 为truefunction Person(n, a) { this.name = n; this.age = a;}var p = new Person('John Backus', 82);console.log(p instanceof Person); // true2、如果存在继承关系,那么子类实例 instanceof 父类也会返回truefunct
阅读全文