js 使用技巧 异于常人

问题描述:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值