JavaScript奇技淫巧
1. 从数组中随机获取成员
var items = [12,54,’a’,2,433,’foo’,’Doe’,2312,99];
var randomItem = items[Math.floor(Math.random()* items.length)];
首先来讲一下 Math。是具有用于数学常数和函数的属性和方法的内置对象 不是函数对象。
不是一个构造函数 所有属性和方法Math都是静态的。
Math.random(); 返回0到1之间的浮点数 不包括1;
Math.floor(); 返回小于或等于给定数量的最大整数
Math.floor(4.7); //4 Math.floor(4.2); //4
Math.floor(-4.2); //-5 Math.floor(-4.8); //-5
2. 生成从0到指定值得数字数组
var numberArray = [];
var max = 100;
for(var i = 1; numberArray.push(i++) < max;);
//这里是利用数组的方法push 把数字一个一个循环放入数组里面。但是这里还有一种方法更高效
for(var i = 1; i < max; i++){
numberArray[numberArray.length] = i;
}
3. 打乱数字数组的顺序
var numbers = [5,457,120,-215,228,200,-88827];
numbers = numbers.sort(function(){
return Math.random() - 0.5;
});
4. 数组之间追加

5. 对象转换为数组
var argArray = Array.prototype.slice.call(arguments);
典型的就是一个 函数参数 是一个伪数组。object类型。
6. 验证是否是数字
function isNumber(n){
return !isNaN(parseFloat(n)) && isFinite(n);
}
7. 验证是不是一个数组
function isArray(obj){
return Object.prototype.toString.call(obj) === '[object Array]';
}
A)如果toString() 方法被重写过的话 就不行了。
Array.isArray(obj); //its a new Array method
如果在浏览器中没有使用frame,还可以用instanceof,但如果上下文太复杂,也有可能出错。

8. 获取数组中的最大值和最小值

9. 不要直接从数组中 delete 或remove元素
如果对数组元素直接使用delete 其实并没有删除 只是将元素置为undefined 数组元素删除应使用splice。

使用splice splice() 该splice()方法改变阵列的通过去除现有元件和/或添加新的元素的含量。
array.splice(start,deleteCount[, item1,[item2...])

也可以这么用
items.splice(3,0,"ss");
在数组索引为3的位置上 删除0 个元素 在添加一个"ss"。 意思就是第四个元素2。
顺便详细说一下splice()函数。当你调用splice() 函数之后 返回来的是 执行之后的数组。 而原函数会被改变
例如[1,2,3,4,5].splice(2,2); 就会返回[3,4]。 原来的就是[1,2,5]。
10. 条件中使用逻辑与或
var foo = 10;
foo == 10 && doSomething();
foo == 5 || doSomething();
function doSomething(arg1){
arg1 = arg1 || 10; // arg1 will have 10 as a default value if it's not already set
}
11. 使用map() 函数方法对数据循环

12. 用JSON来序列化和反序列化

13. 使用switch/case 代替一大叠的if/else
当判断分支超过两个 使用switch会比较快。
switch/case 使用数字区间

14. 处理WebSocket的超时
通常情况下WebSocket连接创建后,如果30秒内没有任何活动服务器端会对连接进行超时处理 防火墙也可以对单位周期没有活动的连接进行超时处理
为了防止这种情况的发生 可以每隔一段时间 往服务器发送一条空的消息。 一个用于使连接保持活动状态 一个专门用于结束状态

浙公网安备 33010602011771号