时间:2022-05-29 16:33:01 | 来源:网络营销
时间:2022-05-29 16:33:01 来源:网络营销
首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门,谈不上是方法技巧,但都是一些教训。// Mistake另一个基本的逻辑错误就是在大小写不敏感的校验场合(字母可大写可小写)没有忽略大小写,此时 /i 标志位就很实用:
// 踩到坑了
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 开发者都曾踩过这两个标志位的坑——因此别忘了在适当的时候用上它们!
var nodesArr = Array.prototype.slice.call(document.querySelectorAll("div"));你还可以使用一次简单的 slice 调用来克隆一个数组:
// "true" array of DIVs
// 得到一个由 div 元素组成的“真正的”数组
var argsArr = Array.prototype.slice.call(arguments);
// changes arguments to "true" array
// 把 arguments 转换成一个“真正的”数组
var clone = myArray.slice(0); // naive clone注:这里的参数 0 也可以省略,我估计 undefined 被 slice 方法自动转换为 0 了吧。
// 浅克隆
[1, 3, 9, 2].sort();……这没错,但它还有更强大的用法,比如这样:
// 返回 [1, 2, 3, 9]
[你不仅可以对简单类型的数组项进行排序,可以通过属性来排序对象,如果哪天服务器端发来一段 JSON 数据,而且其中的对象需要排序,你可别忘了这一招!
{ 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 }
// ]
var myArray = yourArray = [1, 2, 3];坑里的人们终于明白,原来传对象只是在传引用,因此当我把 myArray 重新赋值为 [] 时,确实会创建出一个新的空数组,但其它对老数组的引用仍然没变!大坑啊!还是换用截断的方法吧,少年!
// :(
// ?
myArray = []; // `yourArray` is still [1, 2, 3]
// `yourArray` 仍然是 [1, 2, 3]
// The right way, keeping reference
// 正确的方法是保持引用
myArray.length = 0; // `yourArray` and `myArray` both [ ]
// `yourArray` 和 `myArray`(以及其它所有对这个数组的引用)都变成 [ ] 了
var mergeTo = [4,5,6];这是一项不为人知的小技巧,简单的原生方法就可以实现数组合并这样的常见任务(注:这个方法的巧妙之外不仅在于 push 方法可以接收多个参数,还涉及到 apply 方法的第二个参数的用法。)
var mergeFrom = [7,8,9];
Array.prototype.push.apply(mergeTo, mergeFrom);
mergeTo; // is: [4, 5, 6, 7, 8, 9]
if(navigator.geolocation) {当然这可以正常工作,但它并不一定有很好的效率,因为这个对象探测方法会在浏览器中初始化资源,在过去,上面的代码片断可能会在某些浏览器下导致内存泄露,更好、更快的方法是检查对象是否包含某个键名:
// Do some stuff
// 在这里干点事情
}
if("geolocation" in navigator) {键名检查十分简单,而且可以避免内存泄露,另外亿企邦请大家注意,如果这个属性的值是假值,那么前一种探测方式将会得到“否”的结果,并不能真正探测出这个键名是否存在。
// Do some stuff
// 在这里干点事情
}
$("a.trigger").on("click", function(e) {注:不知道哪个类库有这个方法,估计其作用相当于 return false; 吧,语法看起来像 jQuery,但 jQuery 并没有这个方法,而且 jQuery 是支持 e.preventDefault 和 e.stopPropagation 方法的。
e.stop();
// Do more stuff
// 在这里干点事情
});
关键词:基础,知识,忽略