技术开发 频道

JavaScript开发者常忽略的七个知识要点

        【IT168 技术】JavaScript本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它。昨天我们将这些模式应用到了JavaScript 框架中,今天这些框架又驱动了我们的Web应用程序。很多新手开发者被各种强大的JavaScript 框架吸引进来,但他们却忽略了框架身后浩如星海的 JavaScript 实用技巧。本文将为你呈献其中七个基础知识点:

  1. 在String.prototype.replace方法中使用/g和/i标志位

  令很多JavaScript 初学者意外的是,字符串的 replace 方法并不会 替换所有匹配的子串——而仅仅替换第一次匹配。当然 JavaScript 老手们都知道这里可以使用正则表达式,并且需要加上一个全局标志位(/g):

// Mistake
// 踩到坑了
var  str
= "David is an Arsenal fan, which means David is great" ;
str.replace(
"David" , "Darren" ); // "Darren is an Arsenal fan, which means David is great"

// Desired
// 符合预期
str.replace(
/David/g, "Darren" ); // "Darren is an Arsenal fan, which means Darren is great"

  (译注:上面这段例程我没有看懂用意,可能是注释有误吧。)

str.replace(/david/gi, "Darren" ); // "Darren will always be an Arsenal fan, which means Darren will always be great"

  每个JavaScript 开发者都曾踩过这两个标志位的坑——因此别忘了在适当的时候用上它们!

  2. 类数组对象和Array.prototype.slice方法

  数组的 slice 方法通常用来从一个数组中抽取片断。但很多开发者不了解的是,这个方法还可以用来将“类数组”元素(比如 arguments 参数列表、节点列表和属性列表)转换成真正的数组:

var  nodesArr = Array.prototype.slice.call(document.querySelectorAll( "div" ));
// "true" array of DIVs
// 得到一个由div 元素组成的“真正的”数组

var  argsArr
= Array.prototype.slice.call(arguments);
// changes arguments to "true" array
// 把arguments 转换成一个“真正的”数组

  你还可以使用一次简单的slice调用来克隆一个数组:

var  clone = myArray.slice(0); //浅克隆

  Array.prototype.slice 绝对是 JavaScript 世界中的一玫珍宝,但 JavaScript 初学者们显然还没有意识到它的全部潜力。

  3. Array.prototype.sort方法

  数组的 sort 方法 远远没有被充分利用,而且可能比开发者们想像的更加强大。很多开发者可能觉得 sort 方法可以用来做这种事情:

[ 1 , 3 , 9 , 2 ].sort();
    
// Returns: [1, 2, 3, 9]
    
// 返回[1, 2, 3, 9]

  这没错,但它还有更强大的用法,比如这样:

[
    { name:
"Robin Van PurseStrings" , age: 30 },
    { name:
"Theo Walcott" , age: 24 },
    { name:
"Bacary Sagna" , age: 28 }
].sort(
function (obj1, obj2) {
    
// Ascending: first age less than the previous
    
// 实现增序排列:前者的age 小于后者
    return  obj1.age
- obj2.age;
});
    
// Returns:  
    
// [
    
// { name: "Theo Walcott", age: 24 },
    
// { name: "Bacary Sagna", age: 28 },
    
// { name: "Robin Van PurseStrings", age: 30 }
    
// ]

  你不仅可以对简单类型的数组项进行排序,可以通过属性来排序对象。如果哪天服务器端发来一段 JSON 数据,而且其中的对象需要排序,你可别忘了这一招!

0
相关文章