一、JavaScript 数据类型

Variables 是你存储数据的容器。要声明一个变量你需要使用关键字var,然后输入任何你想要的名称:

var myVariable;

数据类型

六种基本数据类型:Boolean、Null、Underfined、Number、String、Symbol(ECMAScript 6)

引用类型:Object、Array、Function...

1 基本数据类型

1.1 Undefined

Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。不过,一般建议尽量给变量初始化。

1.2 Null

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因。

var car= null;

console.log(typeof car);// "object"

实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。

1.3 Boolean

该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。

虽然Boolean类型的字面值只有两个,但JavaScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),例如:

var message1 = "hello";

var messageAsBoolean1 = Boolean(message1);

console.log(messageAsBoolean1); // 输出结果:true

var message2 = "";

var messageAsBoolean2 = Boolean(message2);

console.log(messageAsBoolean2)// 输出结果:false

在这个例子中,字符串message被转换成了一个Boolean值,该值被保存在messageAsBoolean变量中。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。至于返回的这个值是true还是false,取决于要转换值的数据类型及其实际值。

一、JavaScript 数据类型_第1张图片
各种数据类型及其对象的转换规则  

数据类型自动转换Boolean。

var content = "Are you ok?";

if(content) // content被转换成为了 true

console.log("Yeah!"); // 输出结果:Yeah! .

1.4 Number

这种类型用来表示整数和浮点数值。还有一种特殊的数值,即NaN(非数值 Not a Number)

1.4.1特殊值NaN

这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

特点: 1) 任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。

            2) NaN与任何值都不相等,包括NaN本身。

console.log(NaN / 10);

console.log(NaN == NaN); //输出结果:false

注意:网上某些文章中表示 JavaScript中,任何数值除以0会返回NaN,这一说法并不精确。变量未初始化时除以0才会返回NaN,实际变量未初始化除以任何值都会返回0,若变量已经初始化,则返回Infinity(无穷大)

var num1 ;

console.log(num/10); //输出结果:NaN

console.log(num/0); //输出结果:NaN

var num2 = 10;

console.log(num2/0); //输出结果为:Infinity

1.5 String

String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。

console.log(typeof new String("Hello"));//输出结果:object

console.log(typeof String("Hello")); //输出结果:string

console.log(typeof "Hello") //输出结果:string

特殊字符 :Javascript 中可以使用反斜线(\)插入特殊符号,如:撇号,引号等其他特殊符号

var str = "in China \, What is \"hehe\" means?"

console.log(str); // 输出结果为:in China , What is "hehe" means?

一、JavaScript 数据类型_第2张图片
特殊字符

1.6 Symbol

ES5对象属性名都是字符串容易造成属性名的冲突。

var a = { name: 'lucy'};

a.name = 'lili'; // 这样就会重写属性

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

特点:1)Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象

2)Symbol值不能与其他类型的值进行运算

// 没有参数的情况

var s1 = Symbol();

var s2 = Symbol();

console.log(s1 === s2); //输出结果为:false

// 有参数的情况var s1 = Symbol("foo");

var s2 = Symbol("foo");

console.log(s1 === s2); //输出结果为:false

问题:javascript中的所有“本地对象”的数据类型都是对象类型?number对象的数据类型是数字类型还是对象类型?

var num = new Number();

console.log(typeof num);// 输出结果为:object

var num = 10;

console.log(typeof num);//输出结果为:number

答:体点说是基本包装类型Number,当然它也是Object。

再以字符串为例,通过字面量的方式创建:var a = 'string';,这时它就是基本类型值;通过构造函数的方式创建:var a = new String('string');这时它是对象类型。

基本类型是没有属性和方法的,但仍然可以使用对象才有的属性方法。这时因为在对基本类型使用属性方法的时候,后台会隐式的创建这个基本类型的对象,之后再销毁这个对象。

'string'.length; // 输出结果为:6

2 引用类型

引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象。以下使用“对象”描述。

对象是由 new 运算符加上要实例化的对象的名字创建的。例如,下面的代码创建 Object 对象的实例:

var o = new Object();

var o = new Object; // 可以省略,但是为了规范,尽量不要

2.1 Object 对象

因为 ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似,ECMAScript 中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中。

Object 对象具有下列属性:

constructor

对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。

Prototype

对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。prototype 属性使您有能力向对象添加属性和方法。

var o = new Object(10);

console.log(o.propTypes)

function employee(name,job,born){

this.name=name; this.job=job; this.born=born;

}

var bill = new employee("Bill Gates","Engineer",1985);

employee.prototype.salary=null;

bill.salary=20000;

console.log(bill.salary); //输出结果 : 20000

Object 对象还具有几个方法:

hasOwnProperty(property)

判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))

IsPrototypeOf(object)

判断该对象是否为另一个对象的原型。

PropertyIsEnumerable

判断给定的属性是否可以用 for...in 语句进行枚举。

ToString()

返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。

ValueOf()

返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

注释:上面列出的每种属性和方法都会被其他对象覆盖。

你可能感兴趣的:(一、JavaScript 数据类型)