《众妙之门:JavaScript 与 jQuery 技术精粹》部分要点摘录

以下内容来自于《众妙之门:JavaScript 与 jQuery 技术精粹》一书,为本人在阅读的时候感觉有必要记录的地方记录而来。

三重标记法

var d; if(x < 200){ d = 1; } else { d = -1; }   var d = x < 200 ? 1 : -1;

数组的遍历& 性能影响

/* cached outside loop*/ var len = myArray.length; for (var i = 0; i < len; i++) {}   /* cached inside loop */ /* 数组长度在每个循环中都被不必要的重复访问,如此导致程序运行缓慢*/ for (var i = 0, len = myArray.length; i < len; i++){}   /* cached outside loop using while */ var len = myArray.length; while (len--){}

命名空间模式

问题:程序中使用的命名空间是正确的,但对其存在性的检查无效。如下例:

if (!MyNamespace){ MyNamespace = {}; }

执行过程中!MyNamespace 会报错,变量之前么有做声明。较好的处理方式:

方式一

if (!MyNamespace){ MyNamespace = {}; }

方式二

var MyNamespace = MyNamespace || {};

方式三

if( typeof MyNamespace == 'undefined'){ var MyNamespace = {}; }

JavaScript 部件的七部测试法

  1. 当JavaScript 关闭时会发生什么?
  2. 怎样改变外观、感受和内容?
  3. 最终产品的可用性和语义性如何?
  4. 是否明白在发生神马?(当出错时候能否快速定位问题?)
  5. 与其他语言的交互性如何?
  6. 维护人员是否专注?
  7. 是否有测试方案,升级或扩展是否简单易行?

数据类型相关概念

typeof null > "object" //Null 是一个对象   null instanceof Object > false //Null 不是对象的实例   typeof NaN > "number" //NaN 是一个数字   NaN === NaN > false //NaN 不等于任何值   new Array() == false > true //空数组 == false

JavaScript 七宗罪

根源:特定于浏览器的代码

  • 与其他脚本兼容不好
  • 相信取代测试(默认所有东西都是正确的)
  • 使用错误的技术进行设计(不赞同)
  • 依赖于 JavaScript 和特定的输入设备
  • 维护麻烦
  • 未进行文档整理的代码
  • 为机器而非人优化

jQuery 的几个易混淆概念

parent()、parents()、closest()

parent() 用于匹配元素的直接父元素。

parents() 类似于parent(),返回的是多个父元素。

closest() 类似于parents(),但只返回一个父元素或祖先元素,且为最近的元素。

position() 与 offset()

position() 计算相对于偏移父元素(即含有position:relative 的元素的最近父元素,如果没有,相对于文档)

offset() 则总是计算相对于文档的位置。

css('width')与css('height')、width()与height()

前者返回字符型维度,以px 为单位;后者返回整数型维度。

click()、bind()、live()、delegate()

bind()可以一次绑定多个事件,并可以传递回调函数。

var message = "right"; $("a").bind("click contextmenu", { msg: message }, function(e) { alert(e.data.msg); return false; });

live()类似bind(),区别在于可将事件绑定到当前和将来的元素(通过DOM 脚本生成的元素)

delegate() 在jQuery 1.4.2 中出现的未来弥补live()无法直接用于链式结构。

//无效的 $("#test").children("a").live("mouseover", function() { alert("hello"); });   // $("#test").delegate("a", "mouseover", function() { alert("hello"); });

not()、is()、:not()区别

not() 返回不匹配的元素、is()只会返回布尔值、:not()可用于选择器字符串中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我爱编程

Day18内建模块collections&base64collectionsbase64

collections collections是Python内建的一个集合模块,提供了许多有用的集合类。 namedtuple >>> from collect...

43380
来自专栏北京马哥教育

PEP8 Python 编码规范整理

作者:willhuo 来源:http://lib.csdn.net/article/python/1534 决定开始Python之路了,利用业余时间,争取更深入...

38860
来自专栏calmound

sprintf的用法

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者...

37060
来自专栏C/C++基础

printf()详解之终极无惑

printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。

46930
来自专栏Python

Python的if判断与while循环

1.if判断 Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句 else: 执行语句 Python中...

28170
来自专栏Golang语言社区

go语言的匿名函数

1-声明一个匿名函数 func(参数列表) 返回值列表 { 函数体… } 2-匿名函数的调用

10220
来自专栏青玉伏案

PHP中有关正则表达式的函数集锦

之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载。当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_h...

24650
来自专栏HTML5学堂

2015.12.07 HTML5真题练习

HTML5学堂:每天一道题,强壮程序员!今日主要涉及12.04题目(数据类型、NaN)的解答,以及一道涉及作用域、this指向相关知识的题目。 HTML5真题【...

33980
来自专栏Coding+

JS 中的一些概念问题

在 JS 中,每个对象都会在内部引用一个叫做prototype的对象,而这个原型对象本身也会引用自己的原型对象,并以此类推。这样就形成了一条原型引用链,这个链的...

11430
来自专栏玄魂工作室

如何学Python 第七课 列表型变量 列表方法 列表索引

在上一篇文章里,我们介绍了if语句、elif语句和else语句以及条件判断语句。我们今天来说点流程控制之外的东西:列表。列表型变量可以在变量下存储多个值,并以索...

34870

扫码关注云+社区

领取腾讯云代金券