postpass JavaScript 数据类型 – 个人博客

JavaScript 数据类型

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)。

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

对Symbol的理解:symbol 英文意思为 符号、象征、标记、记号,在 js 中更确切的翻译应该为 独一无二的值

const foo = Symbol('foo');
const bar = Symbol('foo');
console.log(foo === bar); // false

Symbol.for 方法可以检测上下文中是否已经存在使用该方法且相同参数创建的 symbol 值,如果存在则返回已经存在的值,如果不存在则新建。

const s1 = Symbol.for('foo');
const s2 = Symbol.for('foo');
console.log(s1 === s2); // true

const foo = Symbol.for("foo");
const key = Symbol.keyFor(foo);
console.log(key) // "foo"

使用场景

1.优化代码,减少无用的字符串的使用等

const tabTypes = {
    basic: Symbol(),
    super: Symbol(),
}

if (type === tabTypes.basic) {
    return <div>basic tab</div>
}

if (type === tabTypes.super) {
    return <div>super tab</div>
}

2、作为对象属性 当一个复杂对象中含有多个属性的时候,很容易将某个属性名覆盖掉,利用 Symbol 值作为属性名可以很好的避免这一现象。

const name = Symbol('name');
const obj = {
    [name]: 'ClickPaas',
}

typeof与instanceof

typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。

它返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串。 )

typeof 一般只能返回如下几个结果:

“number”、”string”、”boolean”、”Symbol”、”object”、”function” 和 “undefined”。

typeof "John"                 // 返回 string 
typeof 3.14                   // 返回 number
typeof NaN                    // 返回 number
typeof false                  // 返回 boolean
typeof [1,2,3,4]              // 返回 object
typeof {name:'John', age:34}  // 返回 object
typeof new Date()             // 返回 object
typeof function () {}         // 返回 function
typeof myCar                  // 返回 undefined (如果 myCar 没有声明)
typeof null                   // 返回 object

我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!=”undefined”){alert(“ok”)},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。

instanceof instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

  • 语法:object instanceof constructor
  • 参数:object(要检测的对象.)constructor(某个构造函数)
  • 描述:instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
var a=new Array();
alert(a instanceof Array); // true,
同时 alert(a instanceof Object) //也会返回 true;
这是因为 Array 是 object 的子类。


function test(){};
var a=new test();
alert(a instanceof test) 会返回true

使用isArray判断是否为数组

// 判断是否支持该方法
if (Array.isArray) {
    if(Array.isArray(cars)) {
        document.write("该对象是一个数组。") ;
    }
}

标签

发表评论