变量转换
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;
}