在JavaScript中提供了几个对象专用语句及运算符。
1.For...In 声明,用于对数组或者对象的属性进行循环操作。
for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
虽然在JavaScript中数组是对象,但是没有好的理由去使用 `for in` 循环遍历数组。 相反,有一些好的理由不去使用 for in 遍历数组。
http://www.cnblogs.com/sanshi/archive/2011/03/23/1993302.html
2.with语句,为一个或一组语句指定默认对象。
使用该语句的意思是:在该语句体内,任何对变量的引用被认为是这个对象的属性和方法,以节省一些代码。
with(object)
{
}所有在with语句后的花括号中的语句,都是在后面object对象的作用域的。
用法:
with (<对象>) <语句>;
with 语句通常用来缩短特定情形下必须写的代码量。
例如:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
当使用 with 语句时,代码变得更短且更易读:
with (Math)
{
x = cos(3 * PI) + sin(LN10);
y = tan(14 * E);
}
3.this关键词 返回“当前”对象。在不同的地方,this 代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
function <对象名> [(<参数>)] {
...
this.<属性名> = <初始值>;
...
}
然后,用 new 构造函数关键字来构造对象:
var <变量名> = new <构造函数名>[(<参数>)];
构造对象以后,<变量名>成为一个对象,它有它自己的属性——用 this 在 function 里设定的属性。
以下是一个从网上找到的搜集浏览器详细资料的自定义构造函数的例子:
function Is() {
var agent = navigator.userAgent.toLowerCase();
this.major = parseInt(navigator.appVersion); //主版本号
this.minor = parseFloat(navigator.appVersion);//全版本号
this.ns = ((agent.indexOf('mozilla')!=-1) &&
((agent.indexOf('spoofer')==-1) && //是否 Netscape
(agent.indexOf('compatible') == -1)));
this.ns2 = (this.ns && (this.major == 3)); //是否 Netscape 2
this.ns3 = (this.ns && (this.major == 3)); //是否 Netscape 3
this.ns4b = (this.ns && (this.minor < 4.04)); //是否 Netscape 4 低版本
this.ns4 = (this.ns && (this.major >= 4)); //是否 Netscape 4 高版本
this.ie = (agent.indexOf("msie") != -1); //是否 IE
this.ie3 = (this.ie && (this.major == 2)); //是否 IE 3
this.ie4 = (this.ie && (this.major >= 4)); //是否 IE 4
this.op3 = (agent.indexOf("opera") != -1); //是否 Opera 3
this.win = (agent.indexOf("win")!=-1); //是否 Windows 版本
this.mac = (agent.indexOf("mac")!=-1); //是否 Macintosh 版本
this.unix = (agent.indexOf("x11")!=-1); //是否 Unix 版本
}
var is = new Is();
这个构造函数非常完整的搜集了浏览器的信息。我们看到它为对象定义了很多个属 性:major, minor, ns, ie, win, mac 等等。它们的意思见上面的注释。把 is 变量定义为 Is() 对象后,用 if (is.ns) 这种格式就可以很方便的知道浏览器的信息了。我们也可以从这个构造函数中看到,它也可以使用一般的 JavaScript 语句(上例中为 var 语句)。
例:使用参数的构造函数:
function myFriend(theName, gender, theAge, birthOn, theJob) {
this.name = theName;
this.isMale = (gender.toLowerCase == 'male');
this.age = theAge;
this.birthday = new Date(birthOn);
this.job = theJob
}
var Stephen = new myFriend('Stephen', 'Male', 18, 'Dec 22, 1982', 'Student');
为自定义对象增加方法:
例:在university对象中增加一个方法,该方法是显示它自己本身,并返回相应的字串。
function university(name,city,createDate,URL)
{
this.Name=Name;
this.city=city;
this.createDate=New Date(creatDate);
this.URL=URL;
this.showuniversity=showuniversity;
}
其中this.showuniversity就是定义了一个方法---showuniversity()。
而showuniversity()方法是实现university对象本身的显示。
function showuniversity()
{
for (var prop in this)
alert(prop+="+this[prop]+"");
}
其中alert是JavaScript中的内部函数,显示其字符串。
可以为一个空体对象动态增加属性和方法。把函数赋给一个对象的函数属性时,不能带括号,要在调用时才带括号。
也可以使用动态形式访问属性值 :obj1["属性"]
在对象的函数体中访问属性,this关键字不能省略。
5.自定义数组对象
JavaScript中没有提供像其它语言具有明显的数组类型,但可以通过function定义一个数组,并使用New对象操作符创建一个具有下标的数组。从而可以实现任何数据类型的存储。
a、定义对象的数组
function arrayName(size)
{
this.length=Size;
for(var X=1; X<=size;X++)
this[X]=0;
return this;
}
其中arrayName是定义数组的一个名字, size是数组元素的个数。通过for循环对一个当前对象的数组进行定义,最后返回这个数组。
从中可以看出,JavaScript中的数组是从1到size,这与其它0到size-1的数组表示方法有所不同,当然你可根据需要将数组的下标由1到size调整到0到size-1,可由下列实现:
function arrayName (size)
{
for (var X=0; X<=size;X++)
this[X]=0;
this.lenght=size;
return this;
}
从上面可以看出该方法是只是调整了this.lenght的位置,该位置是用于存储数组的大小的。从而调整后的数组的下标将与其它语言一致。但请读者注意正是由于数组下标顺序由1到size,使得JavaScript中的对象功能更加强大。
6.参数个数可变的函数
JavaScript中可通过arguments.length来检查函数的参数的个数。
例:
function function_Name(exp1,exp2,exp3,exp4);
num =function_Name.arguments.length;
不声明函数参数,然后在函数内部,直接使用arguments数组对象访问参数。
7.动态函数
var funobj=new Function(arg1,arg2...,funBodyArg);,每个参数都必须是字符串,前面的参数是funobj的参数名,最后的参数是funobj函数体中的代码。
8.系统函数
encodeURI(),使用utf8编码
decodeURI()
parseInt(),例如parseInt("123abc",10);,后面的参数表示转换成的进制。
parseFloat();
isNaN(),检测上面两个方法
escape(),可用于对文本的简单加密,非ascii字符,以及空格,标点,重音符号,都用%xx或%uxxxxx unicode编码替换。
unescape()
eval(),执行一句js,与动态函数有类似效果。
9.innerText
innerHTML
outerText
outerHTML