随笔分类 -  JavaScript

1 2 3 4 5 下一页

JavaScript的写类方式(6)
摘要:JavaScript的写类方式(6)时间到了2015年6月18日,ES6正式发布了,到了ES6,前面的各种模拟类写法都可以丢掉了,它带来了关键字 class,constructor,set,get,extends,super。 ES6的写类方式 // 定义类 Person class Person { constructor(name 阅读全文

posted @ 2016-04-08 08:04 snandy 阅读(2513) 评论(3) 推荐(7) 编辑

JavaScript数字精度丢失问题总结
摘要:本文分为三个部分 一、JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 Firebug 这真不是 Firebug 的问题,可以用alert试试 (哈哈开玩笑)。 看看Java的运算结果 再看看Python 2. 大整数运算 Firebug 16位和17位数竟然相等,没天理啊。 又如 看结果 阅读全文

posted @ 2015-12-03 06:50 snandy 阅读(151885) 评论(18) 推荐(26) 编辑

JavaScript 动态插入 CSS
摘要:写组件时有时想把一些组件特性相关的 CSS 样式封装在 JS 里,这样更内聚,改起来方便。JS 动态插入 CSS 两个步骤就可以创建一个 style 对象使用 stylesheet 的 insertRule 或 addRule 方法添加样式一、查看样式表先看下 document.styleSheet... 阅读全文

posted @ 2015-10-11 08:13 snandy 阅读(19394) 评论(2) 推荐(3) 编辑

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

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

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

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

Javascript parseFloat内部解析规则
摘要:这是由小习发的一个问题引起的讨论,结束后大家各自加深了多parseFloat的理解。如下16进制数0x10使用parseFloat转成数字,结果为0。潜意识期望的结果是16。有人说脑残,16进制数为什么要用parseFloat,因为16进制不分int和float(那是10进制的事)。的确是这样,实际... 阅读全文

posted @ 2015-05-08 07:16 snandy 阅读(2309) 评论(0) 推荐(1) 编辑

日期相关的小函数汇总
摘要:在写日历组件和旅行相关频道开发的过程中,很多需要地方需要和日期对象打交道。拿京东旅游首页来说, 左上角的搜索框就包含了许多日期相关的交互逻辑,它包含了机票,酒店,度假等,这些都含有出发日期,到达日期等。 里面还包含了一个日期组件,在用户选择完出发日期后,会自动把到达日期定位在出发日期的下一天。 又如 阅读全文

posted @ 2015-01-23 18:00 snandy 阅读(2360) 评论(3) 推荐(5) 编辑

设置输入域(input/textarea)中文本光标的位置
摘要:以前记录了一篇将光标定位于输入框最右侧的实现方式 ,实现光标定位在文本的最末。这种需求往往在修改现有的文本。有时可能还需要把光标定位在首位,或者中间某个位置,这就需要实现一个更通用的方法。这个方法setCursorPosition需要使用两个原生APIsetSelectionRangecreateT... 阅读全文

posted @ 2014-11-21 13:53 snandy 阅读(43647) 评论(1) 推荐(4) 编辑

跨域iframe的高度自适应
摘要:1. 跨子域的iframe高度自适应2. 完全跨域的iframe高度自适应同域的我们可以轻松的做到1. 父页面通过iframe的contentDocument或document属性访问到文档对象,进而可以取得页面的高度,通过此高度值赋值给iframe tag。2. 子页面可以通过parent访问到父... 阅读全文

posted @ 2014-08-12 07:35 snandy 阅读(38532) 评论(24) 推荐(16) 编辑

同域iframe的高度自适应
摘要:引子父页面里控制子页面子页面里控制父页面一、引子我们先看一个示例,有两个页面,1.html通过iframe嵌入2.html,两个页面都是同域的1.html 1.html 2.html,很多P元素将高度撑高一些 2.html 这是一个i... 阅读全文

posted @ 2014-08-11 07:33 snandy 阅读(17042) 评论(16) 推荐(10) 编辑

JavaScript中判断为整数的多种方式
摘要:之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer)。JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的double类型一样。但实际操作中比如数组索引、位操作则是基于32位整数。方式一、使用取余运算符判断任何... 阅读全文

posted @ 2014-07-07 07:46 snandy 阅读(62333) 评论(8) 推荐(12) 编辑

JavaScript中typeof的坑
摘要:typeof是一个运算符,它对操作数返回的结果是一个字符串,有6种(只针对ES,不包含HOST环境对象)'undefined''boolean''string''number''object''function'因为它本身是运算符,它不是函数,使用时没必要加个小括号if (typeof(obj) === 'undefined') { // ...}typeof用来判断类型,它有几个坑1. 对null返回是'object',你却不能真正当对象使用var obj = nu 阅读全文

posted @ 2014-03-21 16:11 snandy 阅读(5579) 评论(3) 推荐(0) 编辑

JavaScript中奇葩的假值
摘要:通常在以下语句结构中需要判断真假if分支语句while循环语句for里的第二个语句如if (boo) { // do something}while (boo) { // do something}JavaScript中有 6 个值为“假”,这六个值是falsenullundefined... 阅读全文

posted @ 2014-03-11 07:26 snandy 阅读(12745) 评论(9) 推荐(8) 编辑

世界上最短的数字判断代码
摘要:我们知道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) === &# 阅读全文

posted @ 2014-03-09 17:01 snandy 阅读(5408) 评论(8) 推荐(10) 编辑

JavaScript中的不可见数据类型
摘要:JS提供了一些内置对象、函数和构造器供我们编程,如Math、parseInt、Object、Array等。这些都是可见的,编程时可以使用的。比如我可以new Object 或 new Array。有一些则是不可见的,这些对象只能由引擎在特殊的情形提供。这些类型的对象往往还被消减了一些功能。下面列举一些一、Arguments 类型Arguments 类型 不能由程序员手动创建其对象,即你不能 new Arguments() 。 它有且仅有一个对象argumentsfunction func() { console.log(arguments[0]) // 1 console.... 阅读全文

posted @ 2013-11-20 07:14 snandy 阅读(1500) 评论(6) 推荐(0) 编辑

JavaScript生成GUID的算法
摘要:全局唯一标识符(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一词有时也专指微软 阅读全文

posted @ 2013-08-16 12:10 snandy 阅读(80763) 评论(17) 推荐(8) 编辑

JavaScript中点号“.”的多义性
摘要:点号「.」在JavaScript中有两种语义语义1、表示算术中的小数点(浮点数),如 2.5语义2、取对象属性、方法,如 [].push(2)这几乎没有任何难理解的地方,但下面这个问题则很有趣。// 这行代码会如何执行1.toString();Firebug 中如下这里的点号表达的是上述的语义1,因此点号后面必须跟一个数字,这里跟的是toString,报语法错了。解决方法很简单,如加个小括号(1).toString();还可以这么写,但难理解些1..toString();之所以浏览器中都能运行,是因为各浏览器JS引擎都把“1..toString()”理解成了 “1.0.toString()”。 阅读全文

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

冗余换性能-从Backbone的triggerEvents说开了去
摘要: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... 阅读全文

posted @ 2013-05-23 13:32 snandy 阅读(2778) 评论(1) 推荐(3) 编辑

JavaScript中delete操作符不能删除的对象
摘要: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( 阅读全文

posted @ 2013-03-06 14:40 snandy 阅读(9313) 评论(1) 推荐(1) 编辑

JavaScript中instanceof对于不同的构造器可能都返回true
摘要:我们知道 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 阅读全文

posted @ 2013-02-03 20:03 snandy 阅读(2567) 评论(2) 推荐(3) 编辑

1 2 3 4 5 下一页