关于Js(五)------ js的基本类型有哪些?引用类型有哪些?null和undefined的区别。

时间:2021-05-20 15:45:02

 基本类型:Number,String,Boolean,Null,undefined。

 引用类型:Object,Array,Date,RegExp,Function

Object本质上是由一组无序的名值对组成的。

 

ECMAScript中用var关键字来定义变量,因为js是弱类型的,所以无法确定变量一定会存储什么值,也就不知道变量到底会是什么类型,而且变量的类型可以随时改变。

这就是ECMAScript是松散类型的来由,所谓松散类型就是可以用来保存任何类型的数据。

es6中新增了let命令来声明变量、const命令声明一个只读的常量。let的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。const一旦声明,常量的值就不能改变。

typeof 操作符

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.
通过typeof关键字,对这5种数据类型会返回下面的值(以字符串形式显示)
undefined ---------- 如果值未定义 Undefined

boolean ---------- 如果这个值是布尔值 Boolean

string ---------- 如果这个值是字符串 String

number ---------- 如果这个值是数值类型 Number

object ---------- 如果这个值是对象或null Object

需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用。

 

  1. alert( typeof null); // "object"
  2.  
    alert( typeof function () {
  3.  
    return 1;
  4.  
    }); // "function"
  5.  
    alert( typeof '梦龙小站'); // "string"
  6.  
    alert( typeof 1); // "number"
  7.  
    alert( typeof a); // "undefined"
  8.  
    alert( typeof undefined); // "undefined"
  9.  
    alert( typeof []); // "object"

Undefined

 

 null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

 

Undefined类型只有一个值,即特殊的undefined在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。不过,一般建议尽量给变量初始化,但是在早期的js版本中是没有规定undefined这个值的,所以在有些框架中为了兼容旧版浏览器,会给window对象添加undefined值。

 

window['undefined'] = window['undefined']; //或者 window.undefined = window.undefined; 

Null

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

  var car = null; console.log(typeof car); // "object"

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。
例如:

  if(car != null){ //对car对象执行某些操作 }

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

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

尽管null和undefined有这样的关系,但它们的用途完全不同。无论在什么情况下都没有必要把一个变量的值显式地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。