// 踩到坑了 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" // 符合預期 str.replace(/David/g, "Darren"); // "Darren is an Arsenal fan, which means Darren is great"
另外一個基本的邏輯錯誤就是在大小寫不敏感的校驗場合(字母可大寫可小寫)沒有忽略大小寫,此時 `/i` 標誌位就很實用: javascript
str.replace(/david/gi, "Darren"); // "Darren will always be an Arsenal fan, which means Darren will always be great"
var nodesArr = Array.prototype.slice.call(document.querySelectorAll("div")); // 獲得一個由 div 元素組成的「真正的」數組 var argsArr = Array.prototype.slice.call(arguments); // 把 arguments 轉換成一個「真正的」數組
var clone = myArray.slice(0); // 淺克隆
(譯註:這裏的參數 `0` 也能夠省略,我估計 `undefined` 被 `slice` 方法自動轉換爲 `0` 了吧。) css
`Array.prototype.slice` 絕對是 JavaScript 世界中的一玫珍寶,但 JavaScript 初學者們顯然尚未意識到它的所有潛力。 java
[1, 3, 9, 2].sort(); // 返回 [1, 2, 3, 9]
[ { name: "Robin Van PurseStrings", age: 30 }, { name: "Theo Walcott", age: 24 }, { name: "Bacary Sagna", age: 28 } ].sort(function(obj1, obj2) { // 實現增序排列:前者的 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 = []; // `yourArray` 仍然是 [1, 2, 3] // 正確的方法是保持引用 myArray.length = 0; // `yourArray` 和 `myArray`(以及其它全部對這個數組的引用)都變成 [] 了
var mergeTo = [4,5,6]; var mergeFrom = [7,8,9]; Array.prototype.push.apply(mergeTo, mergeFrom); mergeTo; // is: [4, 5, 6, 7, 8, 9]
if(navigator.geolocation) { // 在這裏乾點事情 }
if("geolocation" in navigator) { // 在這裏乾點事情 }
$("a.trigger").on("click", function(e) { e.stop(); // 在這裏乾點事情 });
(譯註:不知道哪一個類庫有這個方法,估計其做用至關於 `return false;` 吧。語法看起來像 jQuery,但 jQuery 並無這個方法,並且 jQuery 是支持 `e.preventDefault` 和 `e.stopPropagation` 方法的。) node
這個懶方法有一個問題,它不只阻止了瀏覽器的默認動做,同時也阻止了事件繼續冒泡。這意味着元素上綁定的其它事件監聽器將不會被觸發,由於它們根本就不知道有事件發生。此時不妨使用 `preventDefault` 吧! 正則表達式
JavaScript 老鳥們看到這篇文章可能會說「我早知道了」,但說不定何時,他們就會在某一點上栽跟頭。提醒你們留意 JavaScript 中的各類小細節,失之毫厘謬以千里啊! 數組
---摘自《知乎》(做者:CSS魔法) 瀏覽器