天天看点

JavaScript零碎知识点归纳

本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。

1、a标签的特殊用法 

<a href="javascript:alert('OK')" target="_blank" rel="external nofollow" >百度</a>

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

<a href="javascript:void(0)" target="_blank" rel="external nofollow" >不链接到任何地方</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 = '[email protected]';
    var b = email.isEmail();
    alert(b);
</script>
           

继续阅读