JavaScript零碎知识点归纳

来源:互联网 发布:合优网络 编辑:程序博客网 时间:2024/05/01 08:22

1、a标签的特殊用法 

<a href="javascript:alert('OK')">百度</a>

即在链接地址中写入javascript代码,结果弹出OK,而不链向百度

<a href="javascript:void(0)">不链接到任何地方</a> 

2、javascript中的变量作用域 

2.1. 全局变量与局部变量

<script>    var i; //全局变量     //方法名是camel命名法     function sayHello(){//方法里面的变量是局部变量 var x=100;alert(x);x++;    }    sayHello(); //输出100    alert(x); //报错,因为x是局部变量,访问不到 </script>
2.2. 函数嵌套函数

<script>function sayHello(){     var x=100;    if(x==100){        var y=x+1;<span style="white-space:pre"></span>alert(y); //输出101     }    alert(y); //也输出101,在方法内部,不存在块级作用域,在C#中就不可以了!!!    for(var i=0;i<2;i++){ <span style="white-space:pre"></span>alert(i)    } //在for循环里面定义的变量是块级作用域    alert(i); //因为i是局部变量,所以输出2 }sayHello();</script>

注:变量使用前可以不用var声明,这样的变量会被认为是“全局变量”,但很少这样用 

3、 js中的undefined与null 

undefined(未知状态): 

3.1、变量定义,但没有赋值,则变量的值为undefined

3.2、调用的方法没有返回值,返回的值为undefined

3.3、对象的属性值不存在,则返回值为undefined,如:document.ddd 

Demo1:

var xx;var yy=null;if(xx==yy){    alert('相等'); } else {     alert('不等');}

输出结果为相等,因为在进行if判断时,浏览器会对xx及yy进行值的判断,因为两者都没有具体的值,认为他们都是false。

如果if判断中换成===[全等于符号],则输出不等! 因为===表示要求xx及yy的数据类型和值都要相同才可以! 

Demo2:

var xx=10 var yy='10'; if(xx==yy){    alert('相等'); } else {    alert('不等');}

输出相等,如果换成===,则输出不等 

Demo3:

var n='10'; switch(n){    case 10:         alert('数字');        break;    case '10':        alert('字符串');         break;}

输出 字符串 

总结:

if中的判断是判断数值,不考虑类型

switch中的判断要考虑类型 

4、类型 

var n=10;
var x; 

typeof(n)的值是'number',

typeof(x)的值是'undefined',

结果有引号的! 

var x=10;if(typeof(x)!='undefined' && x!=null){    alert('变量可用');} else {    alert('变量不可用');}if(x){     alert('变量可用');} else {    alert('变量不可用');}

两者几乎没有什么区别,但当变量x连声明都没有的话,第一种显示"变量不可用",而第二种会报错! 

var x1=1;
var x2=0;
var x3='';
var x4='aaa';
var x5=null'
var x6;

if()判断后的结果分别为:true、false、false、true、false、false 

<script type="text/javascript">     function f1() {alert('first f1');     }    function f1(name) { <span style="white-space:pre"></span>alert(name);    }    f1();</script>
调用 f1() 后的结果:undefined。在JS中,不存在函数重载的说法,因为变量类型都是弱类型的。

所以带有参数的方法被调用,其里面的参数类型为var,所以结果为undefined。

5、类型转换 

parseInt 转成数字!
parseInt(10aaa) 输出结果为10
var n1=parseInt('adw12013s') 输出结果为NaN

Number是针对数字的,Number(参数),参数必须是整数或者小数(是'3.7'就返回3.7),是的话,就转换;不是的话,返回NaN

//下面的判断不可以(条件不成立),用第二种

if(n1==NaN){

    alert('不是数字');

}

//这样就可以了

if(isNaN(n1)){

    alert('不是数字');

关于String() 与toStirng() 

<script type="text/javascript">    var v = null;    v = String(v);    alert(v); //结果是'null'    var v1;    v1 = String(v1);    alert(v1); //结果是'undefined'     var v2 = null;    v2 = v2.toString();    alert(v2); //报错    var v3 ;    v3 = v3.toString();    alert(v3); //报错</script>
执行一段字符串的js代码
var js = 'var n=1;n++;'; js += 'alert(n)';eval(js);

6、字符串操作 

6.1    length属性:获取字符串的字符个数。(无论中文字符还是英文字符都算1个字符。)charAt(index)方法:获取指定索引位置的字符。(索引从0开始)

6.2    indexOf(‘字符串’,startIndex)方法:获取指定字符串第一次出现的位置。startIndex表示从第几个开始搜索。

6.3    split(‘分隔符’,limit);//根据分隔符将一个字符串返回为一个数组。limit表示要返回的数组的最大长度(可自定义)。

6.4    substr(startIndex,len)//从startIndex开始,截取len个字符。

6.5    substring(startIndex,stopIndex)//从startIndex开始,截取到stopIndex位置(不包括stopIndex所在的字符)。 

<script type="text/javascript">    //var uname = new String('a我不h是美女haha10086');    var uname = 'a我不h是美女haha10086'; //与上面一句等价!     alert(uname.length); //输出16    alert(uname.charAt(6)); //输出 女    alert(uname.indexOf('h', 4)); //输出7(从索引4开始寻找,找到索引7发现h)    //split第一个参数是分隔符,第二个参数是要返回的最大元素个数。     var result = uname.split('h'); //第二个参数不写最好!     alert(result.length);    for (var i = 0; i < result.length; i++) {<span style="white-space:pre"></span>alert(result[i]);     }    // substr与substring的比较 //从索引为2的字符开始,截取5个字符,索引是从零开始的。     var result1 = uname.substr(2, 5); //常用 alert(result1);    //从第2个索引开始截取,截取到第5个索引之前。(不包括第5个索引的字符)     var result2 = uname.substring(2, 5);    alert(result2);</script>

7、Array对象 

JavaScript中的Array对象就是数组,首先是一个动态数组,而且是一个像C#中数组、ArrayList、Hashtable等的超强综合体。
数组的使用方式:
var names = new Array();//无需初始化长度,动态

names[0] = "tom";
names[1] = "jerry";
names[2] = 12;
names[3] = true;
遍历数组(for循环)
for (var i = 0; i < names.length; i++) {

    alert(names[i]);

}

for (var key in names) {

    alert(key);

}

输出的是键,与C#不一样,C#的foreach输出的是值要想输出值,把alert(key)写成alert(names[key])即可。

总结:JS中遍历数组一般用for循环,遍历字典,一般用for-in循环 

8、js中的对象(一般情况下,方法名开头小写,对象名开头大写) 

<script type="text/javascript">     function Person() {        this.name = 'Jason';        this.age = 19;    }    var p = new Person();    for (var key in p) {        alert(key);    }</script>

输出name,age 

//注意:JS中数组的初始化是用[],而C#中用{},

Demo1:

<script type="text/javascript">     var names = new Array();     names['one'] = "tom";     names['two'] = "jerry";     names['three'] = 12;     names['four'] = true;    //当names的键不再是简单的0、1、2的时候,names.length的值就会是0,此时用for循环就不行 了,应该使用for in 循环完成    for (var key in names) {<span style="white-space:pre"></span>//注意集合中不能用names.key调用(因为它是数组,不是对象),注意与下面的对象的调用有区别 <span style="white-space:pre"></span>alert(names[key]);     }</script>
Demo2:

function Person(){}var r=Person(); //是方法alert(r); //输出'undefined'var r=new Person(); //是对象alert(r); //输出'Object'
Demo3:

function Person(_name, _age) {    this.name = _name;    this.age = _age;     this.sayHello = function () {<span style="white-space:pre"></span>alert(this.name+','+this.age);     };}var p = new Person('Jason', 18); alert(p.age); //两句alert等价//下面的书写形式说明了。在js中对象就是键值对,键值对就是对象 alert(p['age']);alert(p['age']);

9、关于js中的扩展方法 

Demo1:

<script type="text/javascript">    //原型    function Person(_name) { <span style="white-space:pre"></span>this.name = _name;    }    //扩展方发,即给Person这个原型添加了sayHi方法,以后不管哪个对象都可以直接调用了(注: prototype就是原型的意思)    Person.prototype.sayHi = function () { <span style="white-space:pre"></span>alert('hi!!!');    };    var p1 = new Person();    p1.age = 19; //给p1对象自己扩展age属性,只有自己可以用,下面写成p2.age就错误了 alert(p1.age);    var p2 = new Person();    //alert(p2.age); 错误,因为p2没有这个属性    p2.sayHi(); //正确---因为是扩展方法,大家都可以使用</script>
Demo2: 给String这个对象添加一个判断是不是邮箱的扩展方法 
<script type="text/javascript">    //下面执行的一段代码,即自己手动的给String这个对象添加了一个isEmail方法,String原本是没 有的。    String.prototype.isEmail = function () {        if (this.indexOf('@') != -1) {            return true;        }        return false;    };    //添加完成之后,自己就可以使用这个方法了!    var email = 'jason!@163.com';    var b = email.isEmail();    alert(b);</script>

0 0
原创粉丝点击