JS的数据类型

一、前言:

  JavaScript中变量似乎很简单,因为它声明变量只需要一个“var”就可以,不像其他编程语言严格区分了数据类型(int/double/char/boolean...)。这样做也是有好处的,变量可以被赋予任何类型的值,同样也可以给这个变量重新赋予不同类型的值。并不是“一定终身”。

  

  可是,JavaScript并没有避开数据类型,只是在声明时统一使用无类型(untyped)的“var”关键字而已,它的数据类型是根据所赋值的类型来确定的。

var x = 1;        //number类型
var x = 0.1;     //number类型,JS不区分整数值和浮点数值

var x = "hello world"; //由双引号内文本构成字符串
var x = 'javascript';   //单引号内文本同样可以构成字符串

var x = true;    //true和false作为布尔值

var x = null;
var x = undefined;  //null和undefined很相似,是特殊的类型

 

二、正文:

  下面对不同的数据类型进行说明

数据类型分类 说明 详细分类

原始类型
  • 原始值不可更改
  • 原始值的比较也是值的比较

比如:var a = 1,  b = 1;

   a == b;   //true

数字(number)
字符串(string)
布尔值(boolean)
null
undefined
对象类型
  • 对象是可变的,即值是可以修改的
  • 对象的比较并非值得比较

比如:var a = [], b = [];

     a == b;   //false,只有在引用相同时,两个只才会相等

特殊对象--数组(array)
特殊对象--函数(function)
object类型

 

1.“==”和“===”,即相等和全等

类型 例子  
相等(“==”) false == 0 使用相等(“==”)符号时,会自动转换符号两边的数据类型再进行比较,容易出错。
全等(“===”) false === 0 使用全等符号时,不会自动转换数据类型,所有该符号也对数据类型进行了比较。

 

false == 0        //true
false === 0    //false

 

2.null和undefined的区别

undefined表示系统级的、出乎意料的或类似错误的值的空缺;表示缺少值,此处应该有值,但没有定义。例如:var a;  a就会显示undefined

null表示程序级的、正常的或在意料之中的值的空缺; 一般多使用null。

undefined
null
0
-0
NaN
""  //空字符串

以上这些值在布尔值转换中,会转换成false。但是这并不足以让你认为他们与false是相等的:  

undefined == true   //false
undefined == false  //false

undefined == null    //true
undefined === null  //false

null ==  false          //false
null == true            //false

"" == false              //true
"" == true               //false

0 == false               //true
0 == true                //false
-0 == false              //true
-0 == true               //false

NaN == false           //false
NaN == true            //false
NaN == NaN            //false NaN与任何值都不相等,包括它自身

 

3.Infinity和NaN

类型 相同点 例子 说明
Infinity 都是Number类型 2/0 表示无限大,超过JS的number所能够表示的最大值。
NaN 0/0 表示not a number,无法计算的结果。

 

//NaN是一个特殊的number,与其他所有值都不相等,包括它自身
NaN === NaN        //false

//唯一识别NaN的方法
isNaN(NaN)         //true

 

4.JS的typeof的用法,可以把数据类型当作字符串返回

  1 2 3 4 5 6
typeof的运算参数: 数字 字符串 布尔值 对象、数组和null 函数 运算数未定义
例子: typeof(123) typeof("123") typeof(true) typeof([]) typeof(function(){}) typeof(arr)
返回值: "number" "string" "boolean" "object" "function" "undefined"

 

//typeof的括号可以不用,直接在后面跟需要测试的内容
var a;
typeof a;        //"undefined"

var cc = {a:123};
typeof cc;        //"object"

typeof null;        //"object"

说明:

  • 用途:可以使用typeof来判断一个变量是否存在,如:if(typeof a != "undefined")
    而不可使用:if(a),因为如果a不存在会报错(未声明),使用typeof则可以避免这个问题。
  • 局限:对于array、null和对象,typeof一律返回object。对此可以通过instanceof来区分。

 

5.JS的instanceof,判断一个变量是否是某个对象的实例

var a = new Array();
a instanceof Array           //true
a instanceof Object          //true

// 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例
function Aoo(){}
function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型继承
var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true
  • instanceof 运算符判断一个对象是否是另一个对象的实例。返回true或false
  • instanceof 运算符用来检测 constructor.prototype 是否存在于参数 obj 的原型链上(或者说:检测obj的原型链上是否存在constructor.prototype )

 

posted @ 2018-05-17 01:29  南歌子  阅读(7473)  评论(0编辑  收藏  举报