问题描述:
1 变量没有声明而直接使用的话 会默认作为一个新的全局变量 应该避免
2 ==和!= 操作符会在需要的情况下自动转化数据类型 但是 === 和!==不会 他们会同时比较值和数据类型 这也使得 他们比 == 和 !=快
3 undefined null 0 false NaN 空字符串逻辑值均为false
4 行尾使用分号
5 使用对象构造器
function Person(firstName,lastName){
this.firstName=firstNmae;
this.lastName=lastName
}
6 小心typeof instanceof contructor
typeof 一元操作符 用于以字符串的形式返回变量的原始类型 typeof null 也会返回object 大多数的对象类型(数组 Array 时间)也会返回object contructor
contructor 内部属性 可以重写
instanceof 会在原型链中的构造器中搜索 返回 true false
var arr =['q','w','e']
typeof arr //"object"
arr instanceof Array //true
arr.constructor() //[]
7使用自调函数 创建后自己执行 也称之为匿名函数
(function(){})()
(function(a,b){
var result=a*b;
return result;
}){}
8 随机获取数组中的值
var items =[1,2,3,4,5,6]
var randomitem=items[Math.floor(Math.random()*items.length)]
9 获取指定范围内的随机数
var x =Math.floor(Math.random()*(max-min+1))+min
10 生成指定数字数组
var array=[],max=100
for(var i=1;array.push(i++)<max;)
11 生成随机的字母数字字符串
function generateRandomAlphaNum(len){
var rdmString=""
for (;rdmString.length<len;rdmString+=Math.random().toString(36).substr(2))
return rdmString.substr(0,len);
}
12 打乱 数组顺序
var numbers=[1,2,3,4,5,6]
numbers=numbers.sort(function(){return Math.random()-0.5})
13 字符串去空格
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"");};
//目前可以直接使用trim()
14 数组间追加
var array1=[1,2,3,4]
var array2=[5,6,7,8]
Array.prototype.push.apply(array1,array2)
15 对象转化为数组
var arrArray=Array.prototype.slice.call(arguments)
16 是否是数字
function isNumber(n){
return !isNaN(parseFloat(n))&& isFinite(n)
}
17 是否是数组
function isArray(n){
return Object.prototype.tpString.call(obj)==='[object Array]';
}
//如果 toString被重写
Array.isArray(obj)
18 清空数组
var array=[1,2,3]
array.length=0
19 删除数组应该使用splice 杜绝使用delete remove
delete 其实并没有删除 只是将元素设置为undefined
var items=[1,2,3,4,5,6]
items.length //6
delete items[3] //true
items.length //6
items.splice(3,1)
items.length //5
20 使用length 截断数组
21 条件中的逻辑与或
var foo =10
f00==10 && something()
foo==5|| something()
22 使用map 函数进行数据循环
var squares=[1,2,3,4]
squares.map(function(val){
return val*val
})
23 浮点数来计算 0.1+0.2=0.30000000000000004 可以通过使用toFixed()和toPrecision()
24 逗号操作符
var a=0
var b=(a++,10)
console.log(a)//1
console.log(b)//10
25 不要对数组使用for-in
//避免
var sum=0
for (var i in arrayNumbers){
sum+=arrayNumbers[i]
}
for (var i = 0; i < arrayNumbers.length; i++)
// 使用普通for循环 i 和length 变量在for循环第一个声明中 而这只会初始化一次 而 for-in 就不一眼了
26 setInterval()和setTimeout 不要传字符串
传入字符串会用类似eval方式进行转化 会慢一些
//避免
setInterval('doSomethingPeriodically()', 1000);
//应该
setInterval(doSomethingPeriodically, 1000);
27 使用switch/case 替代if/else
超过俩个 小于十个 使用switch会快一些
28 不要再循环内部使用try catch finally
29 使用XMLHttpRequests要设置超时
30 元素操作符比 函数调用快
var min=Math.min(a,b)
A.push(v)
var min=a<b?a:b
A[A.length]=v