判断数据类型的方法;
1:typeof
2:instanceof
instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置; 由上结果,字面量产出的原始数据类型无法使用instanceof判断。
3:最实用的方法是Object,prototype.call('你需要判断的值');
上述方法最为便捷有效;
4:另外方法 constructor
var a = {}
a.constructor === Object // true
var b = '111';
b.constructor === String // true
var strN = new String('11111');
strN.constructor === String // true
var c = true;
c.constructor === Boolean // true
var d = Symbol('symbol')
d.constructor === Symbol // true
5:prototype
比较对象的原型与构造函数的原型是否相等
var a = {}
a.__proto__ === Object.prototype // true
var t = new Date();
t.__proto__ === Date.prototype // true
var str = 'sting';
str.__proto__ === String.prototype // true
var strN = new String('11111');
strN.__proto__ === String.prototype // true
6:这个还真有用;数值的千分位格式化;
第一个方法
var num = 123455678;
var num1 = 123455678.12345;
var formatNum = num.toLocaleString('en-US');
var formatNum1 = num1.toLocaleString('en-US');
console.log(formatNum); // 123,455,678
console.log(formatNum1); // 123,455,678.123
第二个方法;
var num = 123455678;
var num1 = 123455678.12345;
var formatNum = String(num).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
var formatNum1 = String(num1).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
console.log(formatNum); // 123,455,678
console.log(formatNum1); // 123,455,678.12,345
7:对对象的循环
for in
for-in 会遍历对象属性,包括原型链中的属性;
Object.keys();
Object.values();keys, values 返回一个给定对象自身可枚举属性数组,自身可枚举属性值的数组
8:数组的去重
方法一
var arr = [1,2,1,1,22,4,5,6];
arr1 = [...new Set(arr)];//[1, 2, 22, 4, 5, 6]
方法二:
var arr = [1, 2, 3, 2, 6, '2', 3, 1];
function uniqueArr (arr) {
return arr.filter(function (ele, index, array) {
// 利用数组indexOf()方法,返回找到的第一个值的索引
// 如果数组元素的索引值与indexOf方法查找返回的值不相等,则说明该值重复了,直接过滤掉
return array.indexOf(ele) === index;
})
}
9:多维数组一行代码实现一维转换
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
其实直接toString就生成了一组序列;
var resultArr = arr.toString().split(',');
console.log(resultArr); // [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]