JavaScript对象是一种复合值:它是属性或已命名值得集合。通过“.”符号来引用属性值。
当属性值是一个函数时候,称奇为方法。通过O.m()来调用对象O中的方法。
字符串也有属性和方法:、
Var s=“hello world!”; //一个字符串
Var word=s.substring(s.index0f("")+1,s.lenght); //使用字符串的属性
可通过String(),Number()或Boolean()构造函数来显示创建包装对象:
var s="text",n=1,b=ture; //一个字符串、数字和布尔值
var S=new String(s); //一个字符串对象
var N=new Number(n); //一个数值对象
var B=new Number(b); //一个布尔对象
3.7 不可改变的原始值和可变的对象的引用
Js的原始值(underfined,null,布尔值,数字和字符串)与对象(包括数组和函数)有着根本区别。
对象的比较并非值得比较:即使两个对象包含同样的属性及相同的值,它们是不相等的。各个索引元素完全相等的两个数组也是不相等的。
var o={x:1} ,p={x:1}
o===p //false:两个单独的对象用不相等
var a=[] ,b=[]; //两个单独的空数组
a===b =>false:两个单独的数组用不相等
通常将对象称为引用类型(reference type),对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。
var a=[]; //定义一个引用空数组的变量a
var b=a; //变量b引用同一个数组
b[0]=1; //通过变量b来修改引用的数组
a[0] //1:变量a也会修改
a===b; //=>ture:a和b引用同一个数组,因此它们相等
使用循环来完成数组复制:
var a=[‘a‘、‘b‘、‘c‘];
var b=[];
for(var i=0;i<a.lenght;i++){
b[i]=a[i];
}
类型转换
js中对象到字符串的转换:
~如果对象具有toString()方法,则调用这个方法。如果他返回一个原始值,Js将这个值转换为字符串,并返回这个字符串的结果。
~如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么JS会调用valueOf()方法。如果存在这个方法,则JS调用它,返回原始值。
~否则JS无法从toString()或valuOf()获得一个原始值,因此这时它将抛出一个类型错误异常。
在对象到数字的转换过程中,Js首先尝试用valueOf()方法: