12 Extremely Useful Hacks for JavaScript
https://github.com/maketroli/js-hacks/blob/master/README.md
1) Converting to boolean using !! operator
function Account(cash) {
this.cash = cash;
this.hasMoney = !!cash;
}
var account = new Account(100.50);
console.log(account.cash); // 100.50
console.log(account.hasMoney); // true
var emptyAccount = new Account(0);
console.log(emptyAccount.cash); // 0
console.log(emptyAccount.hasMoney); // false
2) Converting to number using + operator
function toNumber(strNumber) {
return +strNumber;
}
console.log(toNumber("1234")); // 1234
console.log(toNumber("ACB")); // NaN
This magic will work with Date too and, in this case, it will return the timestamp number:
console.log(+new Date()) // 1461288164385
3) Short-circuits conditionals
if (conected) {
login();
}
conected && login();
user && user.login();
4) Default values using || operator
function User(name, age) {
this.name = name || "Oliver Queen";
this.age = age || 27;
}
var user1 = new User();
console.log(user1.name); // Oliver Queen
console.log(user1.age); // 27
var user2 = new User("Barry Allen", 25);
console.log(user2.name); // Barry Allen
console.log(user2.age); // 25
5) Caching the array.length in the loop
/*
This tip is very simple and causes a huge impact on the performance when
processing large arrays during a loop. Basically,
almost everybody writes this synchronous for to iterate an array:
*/
for(var i = 0; i < array.length; i++) {
console.log(array[i]);
}
/*
If you work with smaller arrays – it’s fine, but if you process large arrays,
this code will recalculate the size of array in every iteration of this loop and
this will cause a bit of delays.
To avoid it, you can cache the array.length in a variable to use it instead of invoking
the array.length every time during the loop:
*/
var length = array.length;
for(var i = 0; i < length; i++) {
console.log(array[i]);
}
//-- To make it smaller, just write this code:
for(var i = 0, length = array.length; i < length; i++) {
console.log(array[i]);
}
; }
6) Detecting properties in an object
This trick is very useful when you need to check if some attribute exists and it avoids running undefined functions or attributes. If you are planning to write cross-browser code, probably you will use this technique too. For example, let’s imagine that you need to write code that is compatible with the old Internet Explorer 6 and you want to use the document.querySelector(), to get some elements by their ids. However, in this browser this function doesn’t exist, so to check the existence of this function you can use the in operator, see this example:
if ('querySelector' in document) {
document.querySelector("#id");
} else {
document.getElementById("id");
}
7) Getting the last item in the array
The Array.prototype.slice(begin, end) has the power to cut arrays when you set the begin and end arguments. But if you don’t set the end argument, this function will automatically set the max value for the array. I think that few people know that this function can accept negative values, and if you set a negative number as begin argument you will get the last elements from the array:
var array = [1,2,3,4,5,6];
console.log(array.slice(-1)); // [6]
console.log(array.slice(-2)); // [5,6]
console.log(array.slice(-3)); // [4,5,6]
8) Array truncation
var array = [1,2,3,4,5,6];
console.log(array.length); // 6
array.length = 3;
console.log(array.length); // 3
console.log(array); // [1,2,3]
9) Replace all
The String.replace() function allows using String and Regex to replace strings, natively this function only replaces the first occurrence. But you can simulate a replaceAll() function by using the /g at the end of a Regex:
var string = "john john";
console.log(string.replace(/hn/, "ana")); // "joana john"
console.log(string.replace(/hn/g, "ana")); // "joana joana"
10) Merging arrays
var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.concat(array2)); // [1,2,3,4,5,6];
/*
However, this function is not the most suitable to merge large arrays
because it will consume a lot of memory by creating a new array.
In this case, you can use Array.push.apply(arr1, arr2) which
instead creates a new array – it will merge the second array in
the first one reducing the memory usage:
*/
var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];
11) Converting NodeList to Arrays
If you run the document.querySelectorAll("p") function, it will probably return an array of DOM elements, the NodeList object. But this object doesn’t have all array’s functions, like: sort(), reduce(), map(), filter(). In order to enable these and many other native array’s functions you need to convert NodeList into Arrays. To run this technique just use this function: [].slice.call(elements):
var elements = document.querySelectorAll("p"); // NodeList
var arrayElements = [].slice.call(elements); // Now the NodeList is an array
var arrayElements = Array.from(elements); // This is another way of converting NodeList to Array
12) Shuffling array’s elements
var list = [1,2,3];
console.log(list.sort(function() { Math.random() - 0.5 })); // [2,1,3]
#javascript
#!! #operator #+ #number
#Short-circuit
#array.length #loop
#detecting #properties #object
#item #array
#array_truncation
#replaceAll #replace
#merging #array #merging_array
#NodeList to #Array
#Shuffling #elements
'프로그래밍 > Script' 카테고리의 다른 글
[javascript] 물품을 구매한 경우 취소 를 클릭하여 중복 거래를 방지해야 합니다 경고창. ie 익스플로러 (0) | 2020.01.16 |
---|---|
JSFIDDLE - https://jsfiddle.net/ (0) | 2020.01.10 |
Internet Explorer 에서의 ajax 에서의 한글 깨짐 현상 (0) | 2019.12.27 |
JSON Editor Online (0) | 2019.11.26 |
[jQuery] AJAX Cross Origin plugin (0) | 2019.10.21 |