JS 类型分类,不同类型值比较的区别

ECMAScript 中有5中简单数据类型(也称为基本数据类型):undefined, Null , Boolean, Number和Stirng.还有1种复杂数据类型—Object,Object本质上是由一组无序的名值对组成的。ECMAScript不支持任何创建自定义类型的机制。而所有的值都将是上述6种数据类型之一。

在《JavaScript 权威指南》中说:
JavaScritpt的数据类型分为两类:原始类型(primitive)和对象类型(object)。P32

而在《JavaScript高级程序设计》中说:

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是是简单的数据段,而引用类型值指那些可能有多个值构成的对象。

同样在:《JavaScript 权威指南》权威指南中,P48中说:我们通常将对象称为引用类型(reference type),以此来和javaScript的基本类型区分开来。依照术语的叫法:对象值都是引用(reference), 对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等。

引用类型有时候也被成为对象定义,因为它们描述的是一类对象所具有的属性和方法《JavaScript高级程序设计》

<html>

<body>
    <script>
//JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(Object)  《JavaScript权威指南》
//ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。    《JavaScript高级程序设计》
//其实是说原始类型也就是基本类型   对象类型也就是引用类型

//基本类型值包括:Undefined, null, Boolean, number string
//基本类型的比较,
        var number1 = 1;
        var number2 = 1;
        alert(number1 == number2);
        
        var string1 = "hello";
        var string2 = "hello";
        alert(string1 == string2);
//引用类型有: object类型,Array类型, Data类型,RegExp类型, Function类型,基本包装类型, 单体内置对象

//引用类型的比较(也可以说是对象类型的比较)
        //1.对象的比较并非值得比较:即使两个对象包含同样的属性及相同的值,它们也是不相等的。
        var o = {x : 1};    //使用字面量常量定义的一个对象
        var p = {x : 1};
        //alert( o == p);        //false
        
        var a = [];        //两个单独的空数组,对于JS来说数组是对象
        var b = [];
        //alert( a == b);    //false
        
        
        //下面看看下来有什么区别:
        //2.定义了一个函数,切记:函数是对象,函数名是指针
        function sayName()
        {    
        }
        var sayName1 = sayName;        //指针指向了同一个对象
        var sayName2 = sayName;
        //alert(sayName1 == sayName2);    //true
        //alert(sayName1);    
        //alert(sayName2);
        
        
        //新对象是使用new操作符后跟一个构造函数来创建的
        //构造函数(构造函数本身也就是一个函数,只不过该函数是出于创建新对象的目的定义的)
        var sayName3 = new sayName();
        var sayName4 = new sayName();
        //alert(sayName3 == sayName4);    //false,sayName3 和 sayName4是不同的对象
        //alert(sayName3);
        //alert(sayName4);
    //总结:对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等
        
        //下面分别给它们定义添加一个属性,看看有什么区别
        sayName1.name = "lvhuizhen";
        //alert(sayName1.name);
        //alert(sayName2.name);    //sayName2.name也等于了"lvhuizhen"
        //为什么呢?
        //因为sayName1和sayName2引用的是同一个对象sayName
        
        
        sayName3.name = "meimei";
        //alert(sayName3.name);    //"meimei"
        //alert(sayName4.name);    //而这个sayName3却是undefined
        //这是为什么呢?
        //因为sayName3和sayName4分别是new的不同对象        
    </script>
</body>
</html>

先总结到这里,后面再继续深入。

转载于:https://my.oschina.net/lvhuizhenblog/blog/307466

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值