[关闭]
@EncyKe 2017-03-10T03:43:59.000000Z 字数 2950 阅读 1635

读书:《众妙之门:JS 与 jQuery 技术精粹》

#读书



1. JS 篇

1.1. 快速排序(找出最大值)数

相比于——

  1. function getMax(numbers) {
  2. var max = 0;
  3. var numbers = [1, 2, 3, 4];
  4. var max;
  5. for (var i = 0, len = numbers.length; i < len; i++) {
  6. if (numbers[i] > max) {
  7. max = numbers[i];
  8. };
  9. }
  10. return max;
  11. }
  12. getMax([1, 2, 3, 4]);

不妨——

  1. function getMax(numbers) {
  2. numbers.sort(function(a, b){
  3. {
  4. return b - a;
  5. }
  6. });
  7. return numbers[0];
  8. }
  9. getMax([1, 2, 3, 4]);

1.2. 巧用 split()join() 加类名函数

  1. function addClass(el, cls) {
  2. var classes = el.className.split(' ');
  3. classes.push(cls);
  4. el.className = classes.join(' ');
  5. }

1.3. 在函数调用参数前验证其类型

1.4. 慎用 typeof 作类型验证

  1. function betterTypeOf(el) {
  2. return Object.prototype.toString.call(el).match(/^\[object\s(.*)\]$/)[1];
  3. // return Object.prototype.toString.call(el).slice(8, -1);
  4. }

1.5. 循环时,把数组长度放进一个变量中,减少性能开销

  1. for (var i = 0, len = Things.length; i < len; i++) {
  2. // do sth.
  3. }

1.6. 用 === 代替 ==,用 !== 代替 !=

1.7. 循环选择:forEach()for()while()$.each()

1.8. 把 json 数据的友好呈现

  1. JSON.stringify(json, null, 4);

1.9. 命名空间验证

  1. var myNameSpace = myNameSpace || {};

或者

  1. if (typeof myNameSpace === 'undefined'){
  2. var myNameSpace = {};
  3. };

1.10. 除了 parseInt() 之外,把字符串转为数字的方法

  1. parseInt('20');
  2. Math.floor('020');
  3. Number('020');
  4. +'020';

1.11. null 是一个对象

  1. typeof null; // ==> 'object'
  2. null instanceof Object; // ==> false
  3. Object.prototype.toString.call(null); // ==> "[object Null]"

1.12. NaN 是一个数字

  1. typeof NaN; // ==> "number"
  2. NaN instanceof Number; // ==> false
  3. Object.prototype.toString.call(NaN); // ==> "[object Number]"
  4. NaN === NaN; // ==> false

唯一判断方法 isNaN()——

  1. isNaN(NaN); // ==> true

1.13. [] == false

1.14. 0 == false

1.15. undefined 可以被定义

1.16. call()apply() 方法

把 b 方法看成是 a 对象的一个子方法,并传入参数——

  1. b.call(a, arg);
  2. b.apply(a, [arg1, arg2]);

2. jQuery 篇

2.1. 用 parent()parents()closest() 寻找祖先级元素

closest() 只返回一个,从自身开始检索。

2.2. 用 positon()offset() 获取位置

2.3. 用 css('width')width() 获取宽度/高度

2.4. $.each(Array, function(){}) 优于 $(Array).each()

2.5. $('ul').not('.ul') 等同于 $('ul:not(.ul)')

两者均选择不含 .ul 类名的所有 ul 元素;

2.6. $('ul').is('.ul') 返回布尔值

用于判断 ul 元素是否含有 .ul 类名;

2.7. 可用 has()filter() 作为 not() 的反函数

2.8. filter() 不能用于数组或对象

2.9. merge() 将把两个数组的内容合并到第一个数组中

  1. var arr1 = ['one', 'two'];
  2. var arr2 = ['three', 'four'];
  3. $.merge(arr1, arr2);
  4. // ==> arr1 = ["one", "two", "three", "four"]

2.10. extend() 将把两个对象的内容合并到第一个对象中

  1. var obj1 = {one: 'un', two: 'deux'};
  2. var obj2 = {three: 'trois', four: 'quatre'};
  3. $.extend(obj1, obj2);
  4. // ==> obj1 = {one: 'un', two: 'deux', three: 'trois', four: 'quatre'};

附:参考

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注