一、表达式
var arr = []
var p = {};
var f = function(){}
f()
a.sort()
我们可以用花括号将多条语句括起来,这就是复合语句(语句块)。
分号前面可以没有任何内容
var
和function
都是声明语句,它们声明或定义变量或函数。function a(){}
3、条件语句
switch(expression) {
case "":
case "":
statement;break;
.....
}
注意:由于对每个case的匹配操作实际是“===”全等运算符比较,而不是“==”相等运算符比较,因此,表达式和case的匹配并不会做任何类型转换。比如字符串"10"不等于数值10.
(contidion) ? expr1 : expr2
while(expression) {
statement
}
do...while语句
do {
statement
} while(expression);
for(initialize ; test ; increment) {
statement
}
initialize、test、increment三个表达式之间用分号隔开,分别负责初始化操作、循环条件判断和计数器变量的更新。
var o = { name: 'tg', age: 18};
for(var v in o) {
console.log(v + ': ' + o[v]);
}
break
语句是强制退出循环,然后执行循环后面的语句。
continue
语句是终止本次循环的执行并开始下一次循环的执行。
标签是由语句前的标识符和冒号组成。label语句定义的标签一般由break或continue语句引用。加标签的语句一般要与for等循环语句配合使用。
label : statement
return
语句时,函数终止执行。
异常是指当发生了某种异常情况或错误时产生的一个信号。
with
语句用于临时扩展作用域链,也就是将代码的作用域设置到一个特定的对象中。
with(object){
statement
}
将object添加到作用域链的头部,然后执行statement,最后把作用域链恢复到原生状态。
var o = {
name: 'tg',
age: 24
};
with(o){
console.log('name:' + name); // name:tg
console.log('age:' + age); // age:24
}
with里面的name相当于o.name。
(4)debugger语句
debugger语句用来产生一个断点(breakpoint),JavaScript代码的执行会停止在断点的位置。一般用来调试代码。
var o={
name:'a'
}
var o = {
go: function(x){
return x+1;
}
};
o.go(2) // 3
如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。- 对象直接量: var o={};
- 关键字new: var o=new Object();
- Object.create()函数: var o=Object.create(null)
var o = {
name : 'a'
}
o.name // "a"
o['name'] //“a"
var o = {
name : 'a',
age : 12
}
for(var i in o){
console.log(o[i]
}
// "a"
// 12
使用Object.keys方法,返回一个数组。
var o = {
name : 'a',
age : 12
}
Object.keys(o) //['name','age']
(3)删除属性
delete运算符可以删除对象的属性。(只能删除自有属性,不能删除继承属性。)
用于判断一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。
in运算符
in运算符左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性就返回true。
var o = {
name : 'a'
}
'name' in o //true
var o = {
name : 'a',
age : 12,
intro : [false,null,'']
}
s= JSON.stringify(o) // s {"name":"a","age":12,"intro":[false,null,""]}
p=JSON.parse(s) // p是o的深拷贝
注意:JSON.stringify()只能序列化对象可枚举的自有属性。对于一个不能序列化的属性来说,在序列化后的输出字符串中会将这个属性省略掉。
构造函数也可以传入参数:
function Car(color){
this.color = color;
}
var c = new Car('red’);
Object.getPrototypeOf(c) === Car.prototype //true
Object.create方法用于从原型对象生成新的实例对象,可以替代new命令。
Object.getOwnPropertyNames方法返回一个数组,成员是对象本身的所有属性的键名,不包含继承的属性键名。
对象实例的hasOwnProperty方法返回一个布尔值,用于判断某个属性定义在对象自身,还是定义在原型链上。
var arr = [1,2,3];
var arr = [];
arr[0] =1;
var arr = [1,'a',{name:'a'},function(){}];
var a=new Array();
var a2=new Array(10); //包含10个数组项但为undefined的数组
var a3=new Array(1,2,3,4); //包含4个数组项,并且分别有值
3、数组长度
var arr = [1];
arr.length=3;
arr[1] //undefined
var arr = [1,2]
arr.push(3) // [1,2,3]
arr.push('a','b') //[1,2,3,'a','b']
// shift()是删除数组的一个元素。
arr.shift() // [2,3,'a',’b']
稀疏数组是指包含从0开始的不连续索引的数组。通常,数组的length属性值代表数组中元素的个数,但如果是稀疏数组,length属性值大于元素的个数。
var arr = [[1],[2,3]];
arr[0][0] // 1
arr[1][1] //3
7、遍历数组
使用for循环、while循环、for..in或者forEach()方法来遍历数组
// for循环
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}
//while
var i = 0;
while (i < a.length) {
console.log(a[i]);
i++;
}
//for..in
for (var i in a) {
console.log(a[i]);
}
//forEach
a.forEach(function(v){
console.log(v);
})
var o = {
0: 'a',
1: 'b',
length:2
}
o[0] // "a"
o[1] // "b"
o.length // 2
function
关键字来声明,后跟一组参数以及函数体,这些参数在函数体内像局部变量一样工作。function test(num){
if(num > 2){
return num;
}else{
return ;
}
}
如果函数挂载在一个对象上,将作为对象的一个属性,就称它为对象的方法。
var o = {
test: function(){}
}
test()就是对象o的方法。
function name() {}
var f = function(x){
console.log(x);
}
var f=new Function('x','y','return x+y');
Function()函数定义还可以通过Function()构造函数来定义
等价于
var f=function(x,y){
return x+y;
}
函数声明语句也会“被提前”到外部脚本或外部函数作用域的顶部,所以以这种方式声明的函数,可以被在它定义之前出现的代码所调用。
f()
function f(){}
注意:以表达式定义的函数并没有“被提前”,而是以变量的形式“被提前”。
f(); //等同于var f; f(); //调用时只是声明了,没有赋值,未定义
var f = function (){};
// TypeError: f is not a function
4、嵌套函数
function test(){
var name = 'tg';
function test2(){
var age = 10;
console.log(name); // "tg"
}
console.log(age); // Uncaught ReferenceError: age is not defined
}
arguments
出现了,其指向实参对象的引用,实参对象是一个类数组对象function go(x){
console.log(arguments[0]);
console.log(arguments[1]);
}
go(1,2);
//1
//2
arguments
有一个length
属性,用以标识其所包含元素的个数。Array.prototype.slice.call(arguments, 0);
//更简洁的写法
[].slice.call(arguments, 0);
function test(obj){
obj.name = 'tg';
}
var person = new Object();
test(person);
console.log(person.name); // “tg"
name属性返回紧跟在function关键字之后的那个函数名。
function f(){}
f.name //f
函数的length属性是只读属性,代表函数形参的数量,也就是在函数定义时给出的形参个数。
每一个函数都包含一个prototype属性,这个属性指向一个对象的引用,这个对象称做“原型对象”(prototype object)。
apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
(5)eval命令
将字符串当作语句执行
eval('var a=1');
a //1