JS开发中的一些小技巧和方法

前言

这两年前端很火,JavaScript又是前端的必会技能,在JavaScript开发中其实有一些有意思的小技巧和方法,本文记录了一些我工作中遇到的一些技巧和方法。

正文

生成指定范围内的随机数

当我们需要获取指定范围(min,max)内的整数的时候,下面的代码非常适合;这段代码用的还挺多的。

1
2
3
function setRadomNum(min,max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}

json转url参数

当我们进行http请求时,可能需要把json转化为url参数,这时下面这段代码就派上用场了。

1
2
3
4
5
6
7
function json2url(json) {
var arr=[];
for(var name in json){
arr.push(name+'='+json[name]);
}
return arr.join('&');
}

验证是否为数组

1
2
3
function isArray(obj){
return Array.isArray(obj) || Object.prototype.toString.call(obj) === '[object Array]';
}

先检验本地是否有Array.isArray函数,没有就执行后面的方法检测。

清空数组

1
2
3
4
5
6
7
8
9
10
11
方式一 通过将长度设置为0
var arr=[1,2,3,4,5];
arr.length=0;
方式二 通过splice方法
var arr=[1,2,3,4,5];
arr.splice(0,arr.length);
//方式三
var arr=[1,2,3,4,5];
arr=[];

方式三将一个新的数组的引用赋值给变量,其他引用并不受影响。 这意味着以前数组的内容被引用的话将依旧存在于内存中,这将导致内存泄漏。最高效的方法是第一种,所以推荐使用第一种方法清空数组。

保留指定小数位

这个需求在项目中也是很常见的,可以toFixed()方法

1
2
3
var num =3.1415926;
num = num.toFixed(4); //toFixed()方法可把 Number 四舍五入为指定小数位数的数字,括号里面取值0~20(包括0和20)
console.log(num); //3.1416

打乱数组的顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方式一
arr.sort(function(){return Math.random()-0.5});
方式二
function shuffle(arr) {
var i,
j,
temp;
for (i = arr.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
};

方式一使用了数组的内置排序方法:sort,而方式二是借助了一个中间量,随机数组里的两个值,让它们交换位置。

使用 === 而不是 ==

== (或者 !=) 操作在需要的情况下自动进行了类型转换。=== (或 !==)操作不会执行任何转换。===在比较值和类型时,可以说比==更快。

1
2
3
4
5
6
7
8
9
10
11
[10] == 10 // 为 true
[10] === 10 // 为 false
'10' == 10 // 为 true
'10' === 10 // 为 false
[] == 0 // 为 true
[] === 0 // 为 false
'' == false // 为 true 但 true == "a" 为false
'' === false // 为 false

妙用“&&”和“||”

||&&运算符妙用,可用于精简代码,降低程序的可读性。

用于赋值
&&:从左往右依次判断,当当前值为true则继续,为false则返回此值(是返回未转换为布尔值时的原值哦)
|| : 从左往右依次判断,当当前值为false则继续,为true则返回此值(是返回未转换为布尔值时的原值哦)

1
2
3
4
5
6
7
8
9
var attr = true && 4 && "aaa"; //aaa;
var attr = true && 0 && "aaa"; //0
var attr = 100 || 12; //100
var attr = "e" || "hahaha" //'e'
var attr = "" || "hahaha" //'hahaha'

用于条件执行语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 普通的if语句
if(test){
isTrue();
}
// 上面的语句可以使用 '&&' 写为:
( test && isTrue() );
test = false;
if(!test){
isFalse();
}
// 上面的语句可以使用 '||' 写为:
( test || isFalse());

用于多次判断后的赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var add_level = 0;
if(add_step == 5){
add_level = 1;
}
else if(add_step == 10){
add_level = 2;
}
else if(add_step == 12){
add_level = 3;
}
else if(add_step == 15){
add_level = 4;
}
else {
add_level = 0;
}
//可以写成
var add_level = (add_step==5 && 1) || (add_step==10 && 2) || (add_step==12 && 3) || (add_step==15 && 4) || 0;

获取数组中的最大值或最小值

1
2
3
4
5
6
function maxAndMin(arr){
return {
max:Math.max.apply(null,arr.join(',').split(',')),
min:Math.min.apply(null,arr.join(',').split(','))
}
}

该方法适合一维或者多维数组。

随机获取数组里的元素

1
2
3
function getRadomFromArr(arr){
return arr[Math.floor(Math.random()*arr.length)];
}

从数组里查找指定的值

查到了返回true,没查到返回false

1
2
3
4
5
6
7
8
function findInArr(arr, value){
for (var i=0; i<arr.length; i++){
if (arr[i] == value){
return true;
}
}
return false;
}

生成指定长度的随机数字字母字符串

1
2
3
4
5
function getRandomStr(len) {
var str = "";
for( ; str.length < len; str += Math.random().toString(36).substr(2));
return str.substr(0, len);
}

去除字符串的空格

虽然在ECMAScript5中已经实现了trim方法,它对低版本浏览器并不支持,所以有时候我们需要自己实现。

去除首尾空格

1
2
3
4
5
function trim(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
}
trim(' hello world '); //"hello world"

去除所有空格

1
2
3
4
5
function trimAll(str){
return str.replace(/\s+/g,"");
}
trimAll(' he ll o wo r ld '); //"helloworld"

后记

JavaScript里面肯定还有很多技巧,以后遇到了慢慢总结。JavaScript的水很深,感觉还有好多要学的。加油!!!