基础总结
js的基础中,是以js的数据类型为核心的。而数据类型分为简单数据类型和对象。 1.简单数据类型包括数值型、字符串。 1)由于是简单数据类型,没有太多难点,数值型中关于类型转换、进制问题和NaN的问题,其次有一些窍门,例如使用~~来将数字两次取反获得数字的整数部分是取整最快的方法,使用减法乘除法能将其他类型转换成数值型。 2)字符串的方法和数组有很大的类似,其他知识点并不多,类似编码之类的感觉不是很常用。但是字符串的分割方法substr,slice,substring,三种方法有不同用处。 2.复杂的数据类型,是数组、对象,而数组又是一种特殊的对象,包括函数也是一种对象。所以对象是最复杂的了^_^ 1)数组相对比较简单,而且和字符串是相似的,很多方法都通用。这里有一种类数组,在function的arguments参数,即它所有的参数对象(类数组),可以通过Array.prototype.slice.call(arguments),将其转化为真正的数组。数组删掉对应位置的时候会变成undefined,但是长度不变。 2)对象的很多方法数组也可以使用。例如遍历的for(in),删除的delete,检查是否有key的in和遍历的keys。with的用法,with在操作一个对象的属性是非常方便,但是因为没有作用域,当对象没有属性的时候会为所在作用域的对应变量赋值,若没有则会向全局作用域创建一个全局变量,总之with还是不用的好,可以定义变量代替。 var s={a:1,c:function(){var d={b:2},a=2;with(d){a=3;console.log("a",a,this.a)}; return a}} undefined s.c() a 3 1 3 with还有个用处是模板,但是不是特别喜欢这种东西。
函数的东西多,比如作用域、闭包、构造函数。 作用域只需记住链式作用域。一层层嵌套,js没有块的东西,所以不能在if-else里面定义函数。同时function当做一种类型,在定义function的时候就被提到前面去了,因此a(); function a(){},是不会报错的。另外一种东西,函数表达式, var a=function(){},在function前面有东西那么就是表达式,否则就是函数。而使用表达式就没有那种声明提升的优越了。但是用表达式和函数声明同时声明同一个名字的话,表达式优先,无论先后都是表达式为最后的胜者。 new Function()和Function类似,这个F是大写的。他们的没什么不同,最后一个参数是方法体,前面的都是参数。 另外function的name属性,显示函数的名字,如果是表达式则只能在函数内部使用,length是预期参数的个数。 这里的arguments在数组中提到过,arguments通过alice方法变成了一个数组就可以当数组用了,他还有一个方法是callee返回arguments的方法。 闭包是通过用函数内部作用域的方式来避免污染外部环境,它通过返回内部的变量达到外部可访问内部的变量,而且让这些变量一直存在内存中,所以闭包也不能乱用,以防内存被占用过多,影响性能。 eval是个不太好的东西。