如果是其它语言,如python,判断类型不会很麻烦,但是对于js来说,各种null,undefined,NaN进来搀合一脚,有的时候判断就不准确了
1. Number 类型
(1)判断是否为数字类型
当单单使用typeof的时候,NaN也会被识别为number
function isNumber(obj) {
return typeof obj === 'number';
}
console.log(isNumber(NaN)); // true
console.log(isNumber('')); // false
console.log(isNumber(null)); // false
console.log(isNumber(36)); // true
console.log(isNumber(36.11)); // true
所以需要添加个!isNaN
来过滤掉NaN
function isNumber(obj) {
return typeof obj === 'number' && !isNaN(obj);
}
console.log(isNumber(NaN)); // false
console.log(isNumber('')); // false
console.log(isNumber(null)); // false
console.log(isNumber(36)); // true
console.log(isNumber(36.11)); // true
(2)判断是否为整数
ES6提供了Number.isInteger()方法来判断是否为整数,在Chrome中测试没有问题,很好用
但是在node里还没有得到支持,想来V8更新的也不及时,那么用另外一种方法还是有些必要的
var isInteger = function(obj) {
return typeof obj === 'number' && !isNaN(obj) && obj%1 === 0;
}
console.log(isNumber(36)); // true
console.log(isNumber(36.11)); // false
(3)判断是否为浮点数
上边的判断整数的将最后的全等符号改为!==
就可以了
(4)判断正负
将如上表达式后再追加obj>0
或obj<0
即可
关于Number类型的数据,主要方法有
- toFixed() - 转换为10进制的字符串
- toPrecision() - 转换为10进制的字符串
- toString() - 转化为指定进制的字符串
toFixed与toPrecision类似,注意观察接收的参数与结果
toString()方法很多时候可以简写为String()
console.log(Math.PI.toFixed(3)); // "3.142"
console.log(Math.PI.toPrecision(3)); // "3.14"
console.log(Math.PI.toPrecision(6)); // "3.14159"
console.log(Math.PI.toString(2)); // "11.001001000011111101101010100010001000010110100011"
console.log(Math.PI.toString(8)); // "3.1103755242102643"
console.log(Math.PI.toString(10)); // "3.141592653589793"
console.log(String(Math.PI)); // "3.141592653589793"
2. String 类型
String 类型使用typeof就可以判断出来,这里主要整理一下关于String 类型的内置方法。
- charAt(pos) - 取得字符串在某处的字符
- replace(searchValue, replaceValue) - 替换字符串中的指定字符
- indexOf(searchString, position) - 获取指定字符串在字符串中的位置
- slice(start, end) - 复制字符串的一部分构造一个新的字符串
- splice(separator, limit) - 根据指定字符分割字符串
- toLowerCase() - 转化为小写
- toUpperCase() - 转化为大写
var name = 'something';
console.log(name.charAt(1)); // o
var str = 'a-b-c-d-e-f-g';
console.log(str.replace('-', '_')); // a_b-c-d-e-f-g
console.log(str.replace(/(-)/, '_')); // a_b-c-d-e-f-g
console.log(str.replace(/(-)/g, '_')); // a_b_c_d_e_f_g
这个replace应该值的注意,之前用python都是全部替换的,直到今天我才知道replace是默认只替换第一个匹配到的...也许之前莫名其妙的错误找到原因了...(▼へ▼メ)
var str = 'abcabc';
console.log(str.indexOf('b')); // 1
console.log(str.indexOf('f')); // -1
console.log(str.indexOf('c', 3)); // 5
console.log(str.slice(1, 3)); // 'bc'
这个slice还有一些超出边界的处理规则,不过还是这一种常用,就不引申太多了
var str = '2015-12-28';
console.log(str.split('-')); // [ '2015', '12', '28' ]
console.log(str.split('-', 2)); // [ '2015', '12' ]
var str = '2015-12-28 15:29:11';
console.log(str.split(/[\-: ]/)); // [ '2015', '12', '28', '15', '29', '11' ]
正则表达式真是个不错的东西呢,刚接触js的时候我分割多个不同参数都是使用“级联”的,如str.replace(':').replace('-').replace(' ')
var str = 'abcDEF';
console.log(str.toLowerCase()); // abcdef
console.log(str.toUpperCase()); // ABCDEF
4. Arrary 类型
aaa
在使用数组之前,需要先确定这是一个数组,除非你对给定的数据类型很清除。然而遗憾的是Typeof会把数组类型判断为Object类型,可以使用书中提供的一个方法来判断
var is_array = function (value) {
return Object.prototype.toString.apply(value) === '[object Array]';
};
console.log(is_array({'hello': 'world'})); // false
console.log(is_array([1, 2, 3, 4, 5, 6])); // true
- Array.length - 返回数组的长度
- Array.splice(index, number) - 从数组中删除元素
length就是我们理解的length,但是需要注意有时它不等于数组里元素的个数
var myArray = [1, 2, 3, 4, 5, 6];
console.log(myArray.length); // 6
myArray[1000] = true;
console.log(myArray.length); // 1001
使用delete删除数组元素会导致数组产生空洞,使用splice则会完成想要的效果,可能splice在处理大数组的时候会很慢
var testArray = ["a","b","c"];
console.log(testArray);
console.log("size:" + testArray.length);
testArray.splice(0,1);
console.log(testArray);
console.log("size:" + testArray.length);
数组的添加元素,倒转,弹出元素
var arr = [1, 2, 3];
arr.pop(); // [ 1, 2 ]
arr.push(3); // [ 1, 2, 3 ]
arr.shift(); // [ 2, 3 ]
arr.reverse(); // [ 3, 2 ]
arr.unshift(5, 6); // [ 5, 6, 3, 2 ]
var arr = [1, 2, 3, 4, 5];
console.log(arr.slice(1, 3)); // [ 2, 3 ]
数组的排序
var n = [22, 3, 12, 8, 77, 103, 31];
n.sort(function(a, b) {
return a - b;
});
console.log(n); // [ 3, 8, 12, 22, 31, 77, 103 ]
数组转字符串
var arr = [1, 2, 3];
var str = arr.join(',');
console.log(str); // '1,2,3'
var str2 = arr.join('');
console.log(str2); // '123'
数组的方法挺多的 (。・`ω´・)