基本类型(基本类型):Number,String,Boolean,Undefined,Null,Symbol
引用数据类型(对象类型):Object,Array,Function
Undefined只有一个唯一的值:undefined。
console.log(typeof data)
let data;
console.log(data)
Null只有一个唯一的值:null。它是一个字面量,空值,null表示一个空指针,表示对象没有指向任何对象。
使用严格相等符===或者不相等操作符!==来进行判断,不能使用==。,因为==会检查变量是否为undefined。
不能使用typeof判断,因为typeof会判断null为一个对象。
if(data === null){
console.log("yes");
}
console.log(null == undefined); //true
console.log(null === undefined); //false
Symbol是ES6引入的一种数据类型,表示独一无二的值,Symbol是一个类似于字符串的数据类型。
const obj = {
toString(){
return 'abc';
}
};
const sym = Symbol(obj);
sym // Symbol('abc');
var s1 = Symbol('foo');
var s2 = Symbol('foo');
s1 === s2//false
var sym = Symbol('symbol');
sym.toString();
String(sym);
Boolean(sym);
每个Symbol值都是不相等的,Symbol作为标识符用于对象的属性名,不会出现同名的属性。
Symbol值作为属性名时,该属性是公开属性,不是私有属性。
var mySymbol = Symbol();
// 第一种
var a = {};
a[mySymbol] = "hello!";
// 第二种
var a = {
[mySymbol]: "hello!"
}
// 第三种
var a = {};
Object.defineProperty(a, mySymbol, { value: 'hello!' });
//结果
a[mySymbol] // "hello!"
?Symbol值作为对象属性名时,不能使用点运算符。
解释:点运算符后面总是字符串,所以不会读取mySymbol作为标识名所指代的值,导致a的属性名实际上是一个字符串。不是一个Symbol值。
简化obj对象的写法:
// 增强的对象写法
let s = Symbol();
let obj = {
[s] (arg) {
}
}
常量值命名要大写字母+下划线。
log.levels = {
DEBUG: Symbol('debug'),
}
log(log.levels.DEBUG)
instanceof用来检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。即检查对象是否是特定类(或构造函数)的实例。可以用来确定对象的继承关系、
object instanceof constructor
let Car = function() {}
let benz = new Car()
benz instanceof Car // true
function instanceof(obj, constructor) {
// obj的隐式原型
let implicitPrototype = obj?.__proto__;
// 构造函数的原型
const displayPrototype = constructor.prototype;
// 遍历原型链
while (implicitPrototype) {
// 找到,返回true
if (implicitPrototype === displayPrototype) return true;
implicitPrototype = implicitPrototype.__proto__;
}
return false;
}
typeof返回一个字符串,表示传入参数的类型。
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
// 无法准确检测 null 和 数组
typeof null // 'object'
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'
判断一个变量是否存在:
if(typeof a != 'undefined'){//变量存在
}