javascript数据类型解析

137 阅读4分钟

数据类型

js数据类型分为简单数据类型和复杂数据类型。

6种简单数据类型:

  1. 1.Undefined
  2. 2.Null
  3. 3,Bollean
  4. 4.Number
  5. 5.String
  6. 6.Symbol(es6新增,字符)

一种复杂数据类型:

  1. Object(对象)

null

undefined是由null派生过来的,因此他们表面上相等。由于他们的类型不同,所以不全等于。

 console.log(null == undefined);//true
 console.log(null === undefined);//false

Boolean

Boolean(变量)转型函数;

数据类型truefalse
Booleantruefalse
String非空字符串“”(空字符串)
Number非零数值(包括无穷值)0,NaN
Object任意对象null
Undefinedundefined

Bumber

浮点型只会保存近似值,因为对于有些小数,二进制是无法精确表示的。

Number.MIN_VALUE,最小值

Number.MAX_VALUE 最大值

infinity 无穷大

isFinite(变量)函数,判断是否在能表示范围内

isNaN(变量) 判断是否为NAN,如果是返回false,否则返回true,可以转换为数值的也为false

 console.log(isNaN(NaN)); //true
 console.log(isNaN(false)); //false
 console.log(isNaN('19')); //false
 console.log(isNaN("blrfea")); //true
 console.log(isNaN(12));//false

number(变量 ): 转型函数,可用于任何数据类型,

转换规则:

  • 布尔值,true转为1,false转为0
  • 数值,直接返回
  • null,返回0
  • undefined 返回NaN
  • 字符串:空字符串返回0,纯数字字符放回相应的数值,其他的都返回NaN

parseInt(变量,进制数)

将开头有整数的部分转为转为整数。

parseFloat(变量):将开头有小数的部分转为小数。

只能解析十进制

String

字符串的特点:

ECMAscript中的字符串是不可变得,一旦创建,值就不能改变了。要想修改,必须先销毁原始的字符串。然后将新的字符串保存到该变量。

tostring(); 转换为字符串函数。(null,undefined没有tostring()方法。)

变量加上一个空字符也可以转换为字符串:

  let a = 321321;
   a = a + '';

模板字面量:保留换行符,可以换行定义字符串。

  let b = `feaf 
       feaf`;

模板字面量使用变量,插入值函数:${}

 let c = `${a}+${b}=${a+b}`

Symbol类型

符号是原始值,且符号实例是唯一的,不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。

 //a和b是不相等的
 let a = Symbol();
 let b = Symbol();
 let c = Symbol('ab');//可以传入字符串参数,作为对符号的描述

全局注册表

创建时会在全局中检索是否存在对应的符号,如果存在就使用现有的,没有就创建新的。

所有的参数必须使用字符串,因此传给Symbol.for()的所有参数都会转换为字符串。

  let a = Symbol.for('symbol类型');
  let b = Symbol.for();
  console.log(b) //Symbol(undefined)

Symbol.keyFor();查询全局注册表,返回对应的字符串键。

 let a = Symbol.for('abc');
 console.log(Symbol.keyFor(a));//abc

使用符号作为属性的常用方法

Object.defineProperties() 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

 let obj = {};
 let b = Symbol("b");
 let c = Symbol("c");
 ​
 Object.defineProperties(obj, {
   [b]: {
     value: "cde val",
   },
   [c]: {
     value: "fff val",
   },
 });
 ​

**Object.defineProperty()** 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

 let a = Symbol('abc');
 let b = Symbol('cde');
 let c = Symbol('fff');
 let o = {
     one: 'hello',
     two: 'wird',
     [a]: 'abc val'
 };
 ​
 Object.defineProperty(o, b, {
     value: 'aaa'
 });

Object.getOwnPropertyNames() 方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

 let a = Symbol('abc');
 let b = Symbol('cde');
 let c = Symbol('fff');
 let o = {
     one: 'hello',
     two: 'wird',
     [a]: 'abc val'
 }; 
 ​
 console.log(Object.getOwnPropertyNames(o));
  
  //(2) ["one", "two"]

**Object.getOwnPropertySymbols()** 方法返回一个给定对象自身的所有 Symbol 属性的数组。

 let obj = {
   name: "wanmg",
   age: 12,
 };
 let b = Symbol("b");
 let c = Symbol("c");
 ​
 Object.defineProperties(obj, {
   [b]: {
     value: "cde val",
   },
   [c]: {
     value: "fff val",
   },
 });
 ​
 console.log(Object.getOwnPropertySymbols(obj));//[ Symbol(b), Symbol(c) ]

Object.getOwnPropertyDescriptors() 方法用来获取一个对象的所有自身属性的描述符。

 let obj = {
   name: "wanmg",
   age: 12,
 };
 let b = Symbol("b");
 let c = Symbol("c");
 
 Object.defineProperties(obj, {
   [b]: {
     value: "cde val",
   },
   [c]: {
     value: "fff val",
   },
 });
 
 console.log(Object.getOwnPropertyDescriptors(obj));
 /*{
   name: {
     value: 'wanmg',
     writable: true,
     enumerable: true,
     configurable: true
   },
   age: { value: 12, writable: true, enumerable: true, configurable: true },
   [Symbol(b)]: {
     value: 'cde val',
     writable: false,
     enumerable: false,
     configurable: false
   },
   [Symbol(c)]: {
     value: 'fff val',
     writable: false,
     enumerable: false,
     configurable: false
   }
 }*/

Reflect.ownKeys() :返回两种类型的键

 let obj = {
   name: "wanmg",
   age: 12,
 };
 let b = Symbol("b");
 let c = Symbol("c");
 ​
 Object.defineProperties(obj, {
   [b]: {
     value: "cde val",
   },
   [c]: {
     value: "fff val",
   },
 });
 ​
 console.log(Reflect.ownKeys(obj));//[ 'name', 'age', Symbol(b), Symbol(c) ]