javascript学习笔记

1.typeof是操作符,不是函数,不过可以以函数的写法调用。例子:alert(typeof message);alert(typeof(message));

2.js变量类型虽是松散的,但也是有类型的

3.一个变量在定义时被初始化,根据初始化的值,变量的类型就被指明了,比如var message = "some string";此时message是字符串类型,之后也可以赋给它其它类型的值,如message=15,但这样并不推荐

4.js有两个特殊数据类型:undefined类型和null类型

1)undefined类型只有一个值undefined,null类型也只有一个值null

2)undefined类型派生自null类型

3)声明一个未初始化的变量,这个变量的值便是undefined,

如var message,car;

alert(message);//undefined

alert(car);//undefined

alert(message == car);//true

4)一个未声明过的变量,其值也是undefined,

如alert(age);//undefined

5)null表示一个空对象指针,使用typeof查看null类型是object,并不是null

6)null最大的用途是可以用来初始化对象,进而在后续代码中借此判断一个对象是否是有效的,即if(car != null)

5.Number()可以将任何类型转换为数值;parseInt()和parseFloat()只用于将字符串转换为数值;

6.把一个值转换为字符串的函数是.toString()或String()方法

7.toString()和valueOf()都是object类的成员函数

8.js也支持位操作

9.数值和字符串相加,将会把数值转换为字符串,拼接字符串;数值和字符串比较,将会把字符串转换为数值,再进行比较

10.对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。例如:

var person = new Object();

person.name = "Tom";

即,不必像c++样需要先定义好类成员

11.跟c++一样,引用类型的复制,双方指向同一个对象

var obj1 = new Object();

var obj2 = obj1;

obj2.name = "Tom";

alert(obj1.name);// Tom

该规则同样适用于引用类型数据做函数参数时的传参

12.对一个引用类型的对象使用操作符typeof ,总会返回object,并不会返回具体的类型,因此没什么实际意义.可以用另一个操作符instanceof 判断对象是否是某种类型,例如:

alert (person instanceof Object);//变量person是object类型吗

alert (colors instanceof Array);//变量colors是Array类型吗

13.执行环境是一个对象,其中定义的所有变量和函数都属于这个对象,在浏览器中,最外围的执行环境是window 对象

14.当函数被调用的时候,函数被作为对象,被称作活动对象,argument 就是该对象的属性

15.作用域链就是层层嵌套的执行环境链

16.一个变量的作用域只取决于执行环境,而跟花括号无关,这点跟C是不一样的,例如:

if (true) { var color = "blue"; }

alert(color);// 此时是可以访问的

尤其使用for循环的时候易出错:

for (var i = 0; i < 10; i++) {...}

alert(i);//此时i=10

17.除了用new的方法创建object对象,还可以用对象字面量的方法定义,例如:

var person = {

  name:"tom",

  age:19

};

也可以这样定义

var person = {};

person.name = "tom";

person.age = 19;

18.对象字面量还可以为函数传参,例如:

function displayInfo(args) {
    var output = "";
    
    if (typeof args.name == "string") {
        output += "Name:" + args.name + "\n";
    }
    
    if (typeof args.age == "number") {
        output += "Age:" + args.age + "\n";
    }
    
    alert(output);
}

displayInfo({
    name: "Tom",
    age: 19
});

displayInfo({
    name:"John"
});

19.定义数组的各种方式

var colors = new Array(3);//包含3项

var colors = new Array("red","blue","green");

var colors = ["red","blue","green"];

20.js数组可以自动增长

21.对数组执行toString()和valueOf()方法,默认按逗号分隔,如果想按特定符号分隔,可以使用数组的join函数

22.函数的this属性,不是指函数本身,而是函数在执行时所处的执行环境

23.函数的apply方法是相当于在特定的作用域中调用函数,实际上相当于设置函数的this值,call具有同样的作用,它们唯一的区别是,传参方式不一样,前者用数组,后者罗列。这两个函数最大的用处就是扩大函数的作用域。

24.对象有一个重要属性prototype ,函数作为对象,自然也拥有prototype ,prototype中的内容可以视作c++里面的静态成员,即各实例对象共享

25.闭包指有权访问另一个函数作用域中的变量的函数,最常见的形态就是,一个函数中返回值是一个函数,闭包最重要的作用也是可以扩展函数的作用域

27.var val = "false";

if (val) {// 因为字符串"false"不为空,所以隐式转换成布尔类型为真

alert("val是false");

}

if (Boolean(val)){// 仍然为真,并不为false

alert("val是false");

}

posted on 2013-08-15 10:39  any91  阅读(377)  评论(1编辑  收藏  举报