JavaScript学习(三):JavaScript对象类型

来源:互联网 发布:江苏网络安全教育平台 编辑:程序博客网 时间:2024/04/30 07:39
3.5  全局对象

全局对象(global object)的属性是全局定义的符号,JavaScript程序可以直接使用。当JavaScript解释器启动时(或者任何web浏览器加载新页面时),它将创建一个新的全局对象,并给它一组定义的初始属性:
  • 全局属性,比如undefined、Infinity和NaN
  • 全局函数,比如isNaN()、parseInt()和eval()
  • 构造函数,比如Date()、RegExp()、String()、object()和Array()
  • 全局对象,比如Math和JSON
全局对象的属性不是保留字,但应该当做保留字来对待


3.6 包装对象

     包装对象---存取字符串、数字或布尔值的属性时创建的临时对象,所以字符串、数字、布尔值作为原始数据类型也同样具有对象的属性和方法。只是偶尔用来区分字符串值和字符串对象、数字和数值对象以及布尔值和布尔对象。但是字符串、数字和布尔值的属性都是只读的,不能给他们定义新属性。
    var s = 'aaa';
    只要引用了s的属性,JavaScript就会将字符串值通过调用new String(s)的方式转成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(整个流程看起来就是这样子的)。
    同上,数字和布尔值也具有同样的方法:Number()和Boolean()

    可通过String()、Number()或Boolean()构造函数来显式创建包装对象:
var s = 'aaa', n = 1, b = true;
var S = new String(s);
var N = new Number(n);
var B = new Boolean(b);
console.log(s == S);  // true
console.log(s === S);  //false
console.log(typeof(s));  // string
console.log(typeof(S)); // object

只是在值上相同。== 判断值是否相等, === 判断值和类型是否相等。


3.7 不可变的原始值和可变的对象引用

    JavaScript中的原始值(undefined、null、布尔值、数值和字符串)与对象有着根本的区别。原始值是不可更改的:任何方法都无法更改。对数字和布尔值显然如此,但字符串不那么明显,因为字符串看起来像有字符组成的数组,我们期望可以通过指定索引来修改字符串中的字符,实际上,JavaScript是禁止这样做的,字符串中所有的方法看似返回了一个修改后的字符串,实际上是返回一个新的字符串值:
var s = "aaaaa";
console.log(s.toUpperCase());  // AAAAA
console.log(s);  // aaaaa
    原始值的比较是值的比较:只有在它们的值相等的时候它们才相等,比如比较两个单独的字符串,当且仅当它们的长度相等且每个索引的字符都都相等时,JavaScript才认为它们相等。
    
    对象和原始值不同,首选,对象是可变的--它们的值是可以修改的;对象的比较也并非值的比较:即使两个对象包含同样的属性及相同的值,它们也是不相等的。各个索引元素完全相等的两个数组也不相等。
    通常将对象称为引用类型,以此来和JavaScript的基本类型区分开。按照术语的叫法,对象值都是引用,对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。
var a = [];  //定义一个引用空数组的变量a
var b = a;  //变量b引用同一个数组
b[0] = 1;   //通过变量b来修改引用的数组
console.log(a[0]);  //变量a也会修改
console.log(a == b); //a和b引用同一个数组,因此它们相等


0 0