(function(){})()
原型,原型链
对象
对象:一种无序的集合数据类型,它由若干键值对组成
访问对象属性
通过.操作符完成的 属性名必须是一个有效的变量名 属性名包含特殊字符,就必须用''括起来
var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};
middle-school不是一个有效的变量,就需要用''括起来
用['xxx']来访问
xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小红'
xiaohong.name; // '小红'
对象增删属性
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
判断对象是否有某一属性
第一种:用in操作符
继承得到的
var xiaoming = {
name: '小明'
};
'name' in xiaoming; // true
'grade' in xiaoming; // false
'toString' in xiaoming; // true
第二种:用hasOwnProperty()方法
判断一个属性是否是xiaoming自身拥有的,而不是继承得到的
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
特殊情况:
toString定义在object对象中,
而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性
数组
数组获取长度
var arr = [1, 2, 3.14, 'Hello', null, true];
arr.length; // 6
Array的length赋一个新的值会导致Array大小
arr.length = 2;
arr; // arr变为[1, 2]
通过索引赋值时,索引超过了范围,同样会引起Array大小的变化
var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']
数组常用属性
indexOf
slice
splice
push pop
unshilft shilft
sort
reverse
concat
join
循环
for
for in
1.把一个对象的所有属性依次循环出来
2.过滤掉对象继承的属性,用hasOwnProperty()来实现
3.Array也是对象,而它的每个元素的索引被视为对象的属性
while
只有一个判断条件,条件满足,就不断循环,条件不满足时则退出循环
do while
每次循环完成的时候判断条件
1.
var x = 0;
var i;
for (i=1; i<=10000; i++) {
x = x + i;
}
x; // 50005000
2.
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
console.log(key); // 'name', 'age', 'city'
}
3.
var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x; // 2500
4.
var n = 0;
do {
n = n + 1;
} while (n < 100);
n; // 100
函数定义
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
function (x) { ... }是一个匿名函数,它没有函数名。
但是,这个匿名函数赋值给了变量abs,所以,通过变量abs就可以调用该函数。
以上两者等价。注意第二种方式按照完整语法需要在函数体末尾加一个;,表示赋值语句结束。
函数-arguments
函数内部起作用,并且永远指向当前函数的调用者传入的所有参数
浅析js中的arguments