在各种入门尝试未果后,javascript一度被我认为是最烂的语言,然而在看了javascripts:The good part后我的想法完全改变了,正如书中所述,js如果只提炼出一个精简子集能够变成一门及优雅与效率于一身的高级动态语言,很可惜它被大多人误解了,他的缺陷其实就是做的太多。
这里记录我学习js的点滴,我只把我认为比较重要的写下来。
引用:
function myFunc(theObject) { theObject = {make: "Ford", model: "Focus", year: 2006}; } var mycar = {make: "Honda", model: "Accord", year: 1998}; var x = mycar.make; // returns Honda myFunc(mycar); var y = mycar.make; // still returns Honda
这里theObject是一个函数参数,传进来的是一个对象,所以是引用传递,但之后被赋值为一个新的对象,此时它变为一个局部对象而不再能作为引用去修改实际参数。
数组:
js中的array的length是个神奇的属性,可以动态的改变array本身的大小。
var cats = ['Dusty', 'Misty', 'Twiggy']; print(cats.length); // 3 cats.length = 2; print(cats); // prints "Dusty,Misty" - Twiggy has been removed cats.length = 0; print(cats); // prints nothing; the cats array is empty
Array可以用来模拟某些数据结构:
- 堆栈 push() pop()
- 队列 shift()——作用类似出队,unshift()——这个可以作为入队,但是要注意的是它是在左边插入元素,一般意义上的入队可以用push()
- Array对象还有其它很多方法,例如join(),作用类似python。
函数:
可以使用预定义的Function对象来把一个字符串编译成一个函数,缺点是这种函数每次执行时都要先被编译一次。。。
函数可以嵌套,被嵌套的函数是母函数私有的。
数字:
据说js内部把数字通通表示为浮点,这就直接导致1/3=0.3333333..., 9/4 = 2.25。
正则表达式:
javascripts是内建原生正则表达式支持的,这点当然是模仿正则之王perl了,所以js的正则语法和perl几乎差不多。
几个正则匹配中的特殊符号:
$& 插入匹配内容
$` 插入匹配内容前面的内容
$' 插入匹配内容后面的内容
$n or $nn 插入被括起来的正则匹配
类型:
五种基本类型是存在栈上的。Undefined,Null,Boolean,Number,String。其它都是引用类型,存在堆上。
两个操作符,typeof,基本上用来判定基本类型,但Null类型也会返回object。isinstance,语法是 variable isinstance constructor,判断引用类型。