js数据类型

基本类型

js中有六种数据类型,包括五种基本数据类型(Undefined、Null、Boolean、Number和String)

  • typeof 操作符

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.

typeof 123   //Number
typeof 'abc'  //String
typeof true    //Boolean
typeof undefined    //Undefined
typeof null    //Object
typeof { }    //Object
typeof [ ]    //Object
typeof console.log()    //Function

null类型进行typeof操作符后,结果是object,原因在于,null类型被当做一个空对象引用。

1.Number类型
Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。
NaN:非数字类型。特点:① 涉及到的 任何关于NaN的操作,都会返回NaN ② NaN不等于自身。
isNaN() 函数用于检查其参数是否是非数字值。
isNaN(123) //false isNaN("hello") //true

2.String类型
字符串有length属性。
字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,defined没有toString()方法)。

3.Boolean类型
该类型只有两个值,true和false

4.Undefined类型
只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。

5.Null类型
null类型被看做空对象指针,前文说到null类型也是空的对象引用。

6.Object类型(复杂数据类型)
js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法

引用类型

1.Object类型

我们看到的大多数类型值都是Object类型的实例,创建Object实例的方式有两种。

第一种是使用new操作符后跟Object构造函数,如下所示

var person = new Object();

person.name = "Micheal";

person.age = 24;

第二种方式是使用对象字面量表示法,如下所示

var person = {

  name : "Micheal",

  age : 24

};

2.Array类型

数组的每一项可以用来保存任何类型的数据,也就是说,可以用数组的第一个位置来保存字符串,第二个位置保存数值,第三个位置保存对象....另外,数组的大小是可以动态调整的。

创建数组的基本方式有两种

第一种是使用Array构造函数,如下所示

var colors = new Array("red","blue","yellow");

第二种是使用数组字面量表示法,如下所示

var colors = ["red","blue","yellow"];

3 Function类型

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。函数通常是使用函数声明语法定义的,如下所示

function sum(num1,num2){

  return num1 + num2;

};

这和使用函数表达式定义函数的方式相差无几。

var sun = function (){

  return sum1 + sum2;

};

ES6新增数据类型Symbol

Symbol的值有两种。一种是原来的属性名。一种是有Symbol()生成的属性名,由于其表示独一无二,所以该属性名不会冲突。

使用Symbol时注意:Symbol函数前不能用new操作符(Symbol是一个原始数据类型,不是对象);不能为Symbol添加方法;symbol是类字符串形式的基本数据类型;symbol可以转化为字符串(两种方式,前面已经介绍了。),可以转换为boolean,但是不能转化为Number。

使用Symbol()时最好为其传入参数,不传入参数时,使用typeof 时都是返回'symbol',加入参数时就会返回'symbol(参数)',容易区分;由于symbol的值是独一无二的,即使是传入相同的参数,二者的值也是不等的。

由于Symbol的值是独一无二的,所以可以作为属性名存在,但是作为属性名是,不能进行点(.)操作,所有的Symbol值都放在方括号([])中。

前面介绍Symbol 的值是独一无二的,即使是传入相同的参数,二者的值也是不同的,如果想让两者相等,可以使用Symbol.for();

let s1 = Symbol.for('abc');  
let s2 = Symbol.for('abc');  
alert(s1 === s2) //true  

对属性进行遍历是要注意:

Symbol 作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。


  
Object.getOwnPropertySymbols方法返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。  
  
const obj = {};  
let a = Symbol('a');  
let b = Symbol('b');  
  
obj[a] = 'Hello';  
obj[b] = 'ES6';  
  
const objectSymbols = Object.getOwnPropertySymbols(obj);  
  
objectSymbols  
// [Symbol(a), Symbol(b)]  

你可能感兴趣的:(js数据类型)