一些JavaScript技巧

分类:JavaScript
 标签:JavaScript,JavaScript技巧
   修改 | 阅读(799)| 评论(0)

变量转换

var myVar = "3.14159",
str = "" + myVar; // to string
int = ~~myVar;// to integer
float = 1 * myVar;// to float
bool = !!myVar;
/* to boolean - any string with lengthand any number except 0 are true */
array = [myVar]; // to array

取整同时转换成数值型

//字符型变量参与运算时,JS会自动将其转换为数值型(如果无法转化,变为NaN)
'10.567890' | 0
//结果: 10
//JS里面的所有数值型都是双精度浮点数,因此,JS在进行位运算时,会首先将这些数字运算数转换为整数,然后再执行运算
//| 是二进制或, x|0 永远等于x;^为异或,同0异1,所以 x^0 还是永远等于x;至于~是按位取反,搞了两次以后值当然是一样的
'10.567890' ^ 0
//结果: 10
- 2.23456789 | 0
//结果: -2
~~ - 2.23456789
//结果: -2

进制之间的转换

(int).toString(16);// converts int to hex, eg 12 => "C"
(int).toString(8);// converts int to octal, eg. 12 => "14"
parseInt(string,16)// converts hex to int, eg. "FF" => 255
parseInt(string,8)// converts octal to int, eg. "20" => 16

将一个数组插入另一个数组指定的位置

var a = [1, 2, 3, 7, 8, 9];
var b = [4, 5, 6];
var insertIndex = 3;
a.splice.apply(a, Array.prototype.concat(insertIndex, 0, b));

判断是否为IE

var ie =/*@cc_on !@*/false;
// 貌似是最短的,利用IE不支持标准的ECMAscript中数组末逗号忽略的机制
var ie = !-[1,]; // 利用了IE的条件注释
var ie = /*@cc_on!@*/false; // 还是条件注释
var ie//@cc_on=1; // IE不支持垂直制表符
var ie = 'v'=='v'; // 原理同上
var ie = !+"v1";

取数组中最大、最小值

//还傻傻使用循环来查找?
var numbers = [3, 342, 23, 22, 124];
var max = 0;
for (var i = 0; i < numbers.length; i++) {
	if (numbers[i] > max) {
		max = numbers[i]
	}
}
alert(max);

//你out了,下面有更简单的
var numbers = [3, 342, 23, 22, 124];
numbers.sort(function(a, b) {
	return b - a;
});
alert(numbers[0]);

//下面还有原生的、更简单的方法
Math.max.apply(Math, [12, 123, 3, 2, 433, 4]) //取最大值
Math.min.apply(Math, [12, 123, 3, 2, 433, 4]) //取最小值

不用第三方变量交换两个变量的值

a=[b, b=a][0];
//或者
a^=b, b^=a, a^=b;

查找字符串中出现最多的字符及个数

var i, len, maxobj = '',
maxnum = 0,
obj = {};
var arr = "sdjksfssscfssdd";
for (i = 0, len = arr.length; i < len; i++) {
	obj[arr[i]] ? obj[arr[i]]++:obj[arr[i]] = 1;
	if (maxnum < obj[arr[i]]) {
		maxnum = obj[arr[i]];
		maxobj = arr[i];
	}
}
alert(maxobj + "在数组中出现了" + maxnum + "次");

对数组进行去重

Array.prototype.distinct = function() {
	var newArr = [],
	obj = {};
	for (var i = 0,len = this.length; i < len; i++) {
		if (!obj[typeof(this[i]) + this[i]]) {
			newArr.push(this[i]);
			obj[typeof(this[i]) + this[i]] = 'new'
		}
	}
	return newArr
}

//或者

Array.prototype.distinct = function() {
	var sameObj = function(a, b) {
		var tag = true;
		if (!a || !b) return false;
		for (var x in a) {
			if (!b[x]) return false;
			if (typeof(a[x]) === 'object') {
				tag = sameObj(a[x], b[x]);
			} else {
				if (a[x] !== b[x]) return false;
			}
		}
		return tag;
	}
	var newArr = [],
	obj = {};
	for (var i = 0,
	len = this.length; i < len; i++) {
		if (!sameObj(obj[typeof(this[i]) + this[i]], this[i])) {
			newArr.push(this[i]);
			obj[typeof(this[i]) + this[i]] = this[i];
		}
	}
	return newArr;
}


您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新