js中基本数据类型
string number boolean object null undefined symbol bight
其中object包含Date、function、Array
null:表示"没有对象",即该处不应该有值
用法:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
undefined:“缺少值”,就是此处应该有一个值,但是还没有定义
用法:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
symbol:ES6中使用了别人的对象,想在对象中加属性,保证属性名不重复
let a=symbol(‘clean’),symbol函数只是为了说明,没无其他作用
判断类型方法
typeof:其中null是object,Function()是function
let mysymbol=symbol('11');
let a={
[mysymbol]:'hello'
}
a[mysymbol] // 调用
Object.getOwnPropertySymbols() // 获取对象所有symbol属性
// 生成同样的symbol
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
s1===s2
判断数组方法
const p=[];
Array.isArray();
p instanceof Array
object.prototype.tostring.call()
function instance_of(L, R) { //L 表示左表达式,R 表示右表达式
var O = R.prototype; // 取 R 的显示原型
L = L.__proto__; // 取 L 的隐式原型
while (true) {
if (L === null) return false;
if (O === L) // 当 O 显式原型 严格等于 L隐式原型 时,返回true
L = L.__proto__;
}
}
数组扁平化实现
const flat = (arr,n)=> {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])&&n>=1) {
newArr=newArr.concat(flat(arr[i],n-1));
}
else {
newArr.push(arr[i]);
}
}
return newArr;
}