关于JS的数据类型的一些见解

关于js里的数据类型这块,说下个人对它的一些见地

js中的数据类型可以归类两类,

简单数据类型:string,number,boolean,null,undefined

复杂数据类型:object

其实严格说:null是object类型

 
        alert(10 + ":" + typeof (10));//10:number
        alert("abc:" + typeof ("abc"));//abc:string
        alert("true:" + typeof (true));//true:boolean
        alert("null:" + typeof (null));// null:object
        alert("undefined:" + typeof (undefined));//undefined:undefined

1 各数据类型的默认空值:

string:null,

number:NaN

boolean:false

null:null

undefined:undefined

object:null

 var obj_str = null;//string的默认空对象
 var obj_num=NaN;//number的默认空对象
 var obj_bool = false;//boolean 的默认空对象

但是我们一般都是直接定义:

var obj_str, obj_num, obj_bool;

我们这样声明完了,虽然明白自己想要给他们赋予什么类型,可是为难了js了,js识别不出是什么类型的数据变量,所以 js索性丢一个undefined的默认值给他们。

所以,对于undefined我们可以理解成是:没有类型,也没有值的,说白一点儿就是在内存中根本就不给它分配位置,

undefined 也可以理解成对所有未知,不存在类型和值的对象的总称。

2.undefined和null的的区别:

我们先看一段代码:

  undefined == null ? alert(true) : alert(false);
    //输出:true
  undefined === null ? alert(true) : alert(false);
    //输出:false    

他们两个本身不一样, null就相当于 一个空箱子,而undefined 就相当于什么也没有

如果转化为同一个类型(我喜欢理解成忽略类型),来比较值的话,undefined和null的值是相等的,

undefined 是空对象,null是空值。

就相当于现在去掉类型,就相当于把箱子去掉,然后 他们两个都是什么也没有了,

咱们再看另外一段代码:

 undefined = 1 ? alert(true) : alert(false); 

运行了这行代码,会出现什么结果?

输出结果:true

如果你感觉有些吃惊的话,那你要认真接着看了,

在说上面为什么会输出true之前,我们再看一段代码:

 if (undefined = 1) {
            alert(true);
        }
        else {
            alert(false);
        }

让大家失望了,我只是换了一个写法,这样能看得更明显一些:

输出true是因为 1 转化为boolean时为true,

但是,我想说的是:为什么 undefined=1 不报错呢?

原因是:undefined 虽然和 null他们归为一类,但是undefined可以赋值,

这里我参入一些我个人的看法:

undefined是js内置的空对象,这样,在给它赋值就显得理所当然了,

既然这样,null本身是一个空值,在内存中占据一格的值,那么我们如果给null赋值的话,会不会报错呢?我猜想会报错

带着这种猜想,我运行了下面的代码:

   null = 1 ? alert(true) : alert(false); //报错 

报错!

这也正证实了我们的猜想。

这些是我对js数据类型的一些浅显认知,望多多指教

原文地址:https://www.cnblogs.com/qiumohanyu/p/4729685.html