var num = (4,1,2,3) //num=3,逗号用于赋值时总是返回最后一个值
typeof null; //"object"
使用严格模式 的形式:在js头部加上 "use strict"
数据的5个基本类型:Null、Undefined、Boolean、Number、String
typeof操作符返回字符串:
"undefined" --如果值未定义
"boolean"
"string"
"number"
"object" -- 如果这个值是对象或者Null
"function" --
技巧:函数在JavaScript中是对象,不是一种数据类型,然而函数也有一些特殊的属性,可以通过typeof来区分对象与函数
ECMAScript中所有参数的传递都是值,不可能通过引用传递参数。
第四章 变量、作用域和内存问题
数据类型分为基本类型(5种)和引用类型,只能给引用类型添加动态属性。
对于引用类型,当一个变量复制引用类型的值时,实际上是复制一个指针,这个指针与原来的值指向同一个object。
引用类型的函数参数传递的实际是将这个引用类型值的指针传给函数,在函数内部修改该值时会影响外部的值,例如:
function setName(obj){
obj.name="huanghuiquan";
}
var person = {};
setName(person);
alert(person.name); //"huanghuiquan"
typeof 检测基本数据类型
instanceof 检测引用类型的值, 语法: result = variable instanceof constructor
alert (person instanceof Object);
alert (colors instanceof Array);
alert(pattern instanceof RegExp); // 变量pattern 是RexExp?
基本类型不是对象,如果使用instanceof检测基本类型会返回false
执行环境及作用域
我的理解:首先执行环境(execution context)分为全局环境(浏览器为window)和局部环境(函数),JavaScript不像C或Java使用块作用域。每一个函数都有自己的执行环境,当执行到一个函数时,函数的环境就会被堆入一个环境栈,从而形成一个作用域链。作用域链有个特性是当前函数环境位于作用域链的最前端,在识别变量时只能上搜索。还有一个特性是我自己总结的,就是在定义函数时首先会声明所有函数内部的变量,这就是为什么下面的例子会是”undefined“而不是报错。
if(false){
var color = "blue";
}
alert(color); //"undefined"
var a,b;
function setA(x){
a = x;
}
function setB(x){
var a = 'a2';
setA(x);
b = x;
alert(a); //
}
setB('b')
alert(a); //
var a,b;
function setB(x){
function setA(x){
a = x;
}
var a = 'a2';
setA(x);
b = x;
alert(a); //
}
setB('b')
alert(a); //
第五章 引用类型
Object类型
创建Object实例的方法:
var p = new Object(); //构造函数方法 p.name = 'huanghuiquan'
访问Object的方法:var p = {} //对象字面量表示法 var p2 = {name:"huanghiuquan",age:29}
Array类型alert(p.age) ;//点表示法。推荐方法 alert(p['age']); //方括号表示法,注意属性名必须为字符串 ,当属性名包含空格时或者使用变量形式的属性时使用
创建array的方法:
构造函数方法
var arr = new Array(); var arr = new Array(4);//创建length为4的数组,元素为4个undefined var arr = new Array(4,5);//创建length为2的数组 var arr = new Array('4'); //创建length为1的数组 var arr = Array(); // 省略new
字面量方法var arr = [1,'2']
访问数组:数组的方法:var arr = ["a", 'b']; alert(arr[1]); // b arr.length = 1; alert(arr.length); //1 alert(arr[1]);// undefined arr[3] = 'c'; //arr 的元素为a,undefined,undefined, c
栈方法--push(), pop();
队列方法--shift(), push();
反向队列方法 -- unshift(), pop();
重排序方法--reverse(), sort();
contact()方法