兜兜转转在前端好几年,之前也分享过很多前端小点的文章,现在打算把前端需要的基础知识、面试的内容做一个前面的整理。
前端一共有5种基础数据结构,Null,undefined,Boolean,Number,String
ES6新增:Symbol:每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。
ES10新增:BigInt:该数据类型的目的是比Number数据类型支持的范围更大的整数值
引用数据类型: Object。
Object类型包含Object、Array、 function、Date、RegExp。
引用数据类型可以添加和删除属性,同时引用属性的值可以改变
typeof:最普通的判断方法,可以判断基础数据类型,但是无法判断引用数据类型。返回一个字符串,表示未经计算的操作数的类型
Object.prototype.toString.call():常用的判断方式,基本可以做到准确判断
Instanceof、constructor:可以判断引用数据类型 而不能判断基本数据类型,本质上是判断prototype 属性是否出现在某个实例对象的原型链上 e.g object instanceof constructor
console.log(typeof 1); // number
console.log(typeof Math.LN2); // number
console.log(typeof Infinity); // number
console.log(typeof NaN); // number
console.log(typeof 'bla'); // string
console.log(typeof true); // boolean
console.log(typeof false); // boolean
console.log(typeof undefined); // undefined
console.log(typeof new Date()); // object
console.log(typeof null); // object
console.log(typeof {}); // object
console.log(typeof [1,2,3]); // object
console.log(typeof function(){}); // function
let nonObj = Object.create(null);
console.log(nonObj instanceof Object); // false,一种创建非 Object 实例的对象的方法
console.log({test:1} instanceof Object); // true
console.log(({test:1}).constructor === Object); // true
console.log((1).constructor === Number); // true
console.log([] instanceof Array); // true
console.log(([]).constructor === Array); // true
console.log(function(){} instanceof Function); // true
console.log((function() {}).constructor === Function); // true
console.log((true).constructor === Boolean); // true
console.log(('string') instanceof String); // false 并不是对象
console.log(('string').constructor === String); // true
let strFunc = Object.prototype.toString;
console.log(strFunc.call(1)); // [object Array]
console.log(strFunc.call(null)); // [object Null]
console.log(strFunc.call(true)); // [object Boolean]
console.log(strFunc.call('str')); // [object String]
console.log(strFunc.call([])); // [object Array]
console.log(strFunc.call({})); // [object Object]
console.log(strFunc.call(undefined)); // [object Undefined]
console.log(strFunc.call(function(){})); // [object Function]
console.log(strFunc.call(/^\[object (.*)\]$/)); // [object RegExp]
相同:undefined 和 null 都是基本数据类型,if条件中均返回false
不同:undefined声明了变量,但未赋值;null代表空对象,一般可用于初始化
类型选择:null == undefined // true
null === undefined; // false
==
两个操作书的数据结构是否相同;若相同,则比较操作数,若不同,则转换为相同数据类型再比较 ===
检查两个操作书的数据结构是否相同;若不同,则返回false,若相同,则比较操作数
this/apply/call/bind
Array
为什么要把Array单独列出来呢?在面试和日常代码过程中Array相关的属性变换起到了重要的作用,能够很大程度上降低代码的复杂程度
Array的基础方法:
var a1 = new Array(); // []