js学习、备忘

字符串使用单引号’abc’。(双引号也行。推荐;html→双引号,js→单引号)
===严格等于、!==严格不等于
if(x)  当x为undefined、null和0的时候都为false;需注意当x为0的情况容易忽略, 当x未声明的时候会报错 必须要用typeof(x)!='undefined'
定义变量不使用var即表示该变量是全局变量 他归属于Window对象,在<script></script>之间直接定义的变量也属于全局变量,一个页面中多个<script></script>中的全局变量可以互相访问(归属于window),全局的变量在页面关闭或者浏览器关闭的时候才被释放掉,js也有垃圾回收机制会定时执行垃圾回收当一个变量不需要使用的时候赋值为null就会被回收掉。

js变量重复定义后面定义的变量会覆盖前面定义的变量。
js变量没有块级作用域:即是在函数中定义的变量没有层级关系,只用在函数中定义的在整个函数内都有效的而且遵循重复定义会覆盖。如:输出的都是3.。。。function test() {var i = 1;if (1) { var i = 2;  if (2) { var i = 3;  alert(i);} alert(i);} alert(i);}
js中switch判断时,是“全等于”,===
js函数中没有写return的返回值都是undefined。
js函数可以动态的传入参数,通过argument.length获得传入的参数个数,arguments[index]获得参数值.函数不存在方法重载
js同名方法会覆盖,不存在重载所以参数不同方法名相同的函数仍然会覆盖.

js的类型转换:
parseInt(arg)         将字符串转换为整形转换失败返回NaN
parseFloat(arg)       将字符串转换为浮点数换失败返回NaN
Number(value)         将给定的value(可以是任何类型)转换为数值换失败返回NaN TRUE转换为1,false转换为0
String(value)          将给定的value转为字符串和tostring() 一样 但当value为null和undefined时value.tostring()会报错,String(value)则直接返回null或undefined。
Boolen(value)          将给定的value转为boolen类型值,undefined、null、0、''空字符串的boolen值都为false

关于函数:
1、functions test(a,b){return a+b;}  js函数不需要生命函数的返回值和参数的类型,如果方法体有return则返回指定值,如果没有写明return该方法都将返回undefined
2、funciton没有重载,但可以动态的传递参数,在函数中可以通过arguments.length获得参数个数和arguments[index]获取参数值。
3、同名函数会覆盖之前的函数。
4、匿名函数:a、var fuc1=function(a,b){return a+b;}调用fuc1(2,2);  b、直接什么并调用 (function(a,b){return a+b;})(2,2)  
             c、var fuc2=new function('a','b','return a+b');  调用fuc2(2,2);
            
关于js模拟面向对象:
1、方法就是一个对象:function person(){}      var p=new person();   p.name='动态添加属性';   alert(p.name);/alert(p['name'];
2、闭包 简单的理解就是在函数(“外部函数”)中又定义了函数(“内部函数”),并且可以在“外部函数”之外,使用“内部函数”。function test(y) {return function (x) { return x * 2; } (y);} 调用:alert(test(5));
3、js对象可以采用this(动态的添加属性),function person(name,age){this.Name=name;this.Age=age;}   var p=new person('tom',18);  alert(p.Name);/alert(p['Name'];
4、对象中还可以定义方法,可看作c#中类中定义方法。
5、也可以直接 var obj=new Object();  obj.name='动态添加类属性'; obj.fuc=function(){};  创建类/对象。
6、可以可以 var boj={};  obj.name='动态添加类属性'; obj.fuc=function(){};  创建。

String对象相关的方法:
length属性:获取字符串的字符个数。(无论中文字符还是英文字符都算1个字符。)
charAt(index)方法:获取指定索引位置的字符。(索引从0开始)
indexOf(‘字符串’,startIndex)方法:获取指定字符串第一次出现的位置。startIndex表示从第几个开始搜索。
split(‘分隔符’,limit);//根据分隔符将一个字符串返回为一个数组。limit表示要返回的数组的最大长度(可自定义)。多个分隔符使用正则表达式:var msg = 'a★b★c☆d☆e#f';var vals = msg.split(/☆|★|#/);alert(vals);
substr(startIndex,len)//从startIndex开始,截取len个字符。
substring(startIndex,stopIndex)//从startIndex开始,截取到stopIndex位置(不包括stopIndex所在的字符)。
toUpperCase()//转换大写、toLowerCase();//转换小写
match()、replace()、search()方法,正则表达式相关
正则的定义:var reg=new RegExp("\\w+");/var reg=new RegExp('\\w+','g');/var reg=/\w+/g;    g:全部匹配,i:不区分大小写匹配。

关于Array:
1、var arr=new Array(); arr[0]='为数组赋值'; arr[1]=123;  遍历用for(var i=0;i<arr.length;i++){alert(arr[i]} or  for(var item in arr){alert(’item为key‘);}
2、var arr=['为数组赋值',123]; 遍历用for(var i=0;i<arr.length;i++){alert(arr[i]} or  for(var item in arr){alert(’item为key‘);}
3、var arr=new Array('为数组赋值',123);   遍历用for(var i=0;i<arr.length;i++){alert(arr[i]} or  for(var item in arr){alert(’item为key‘);}
4、Array可以当dictionary使用 : var arr=new Array(); arr['人']='REN';     alert(arr.人); 遍历用for(var i=0;i<arr.length;i++){alert(arr[i]} or  for(var item in arr){alert(’item为key‘);}
5、dictionary的简写:var arr = {“人”:”ren”,“口”:”kou”} 这种简写的length为0只能用forin来遍历通过key来访问到值。 遍历用for(var item in arr){alert(’item为key‘);}
6、arr.join('连接符'); 用连接符连接数组的各个值。不添加连接符默认逗号隔开。
7、arr.reverse(); 数组反转,发回的结果为[123,'为数组赋值']
8、arr.sort();排序,默认从小到大排序。可以传入一个方法规定排序方式   arr.sort(function(a,b){return b-a;} 倒叙排列

扩展方法:
通过类对象的prototype设置扩展方法,下面为String对象增加quote(两边加字符)方法
String.prototype.quote = function(quotestr) {if (!quotestr) {quotestr = "\"";}return quotestr + this + quotestr;};
扩展方法的声明要在使用扩展方法之前执行。JS的函数没有专门的函数默认值的语法,但是可以不给参数传值,不传值的参数值就是undefined,自己做判断来给默认值。

posted on 2013-09-11 15:55  淫光蝎子  阅读(309)  评论(0编辑  收藏  举报