Javascript 教程 在线

515JavaScript类型转换

undefined 与 null 的区别:

表面上 undefined 与 null 都是什么都没有的意思,但是实际上 undefined 是未定义(就是变量没有初始化),null 是一个变量初始化了,但是什么值都没给,只给了一个空对象;进一步说,undefined 与 null是值相等,类型不相等。

514JavaScript 类型转换

检测数据类型:typeof 与 instanceof

typeof

typeof 用以获取一个变量或者表达式的类型,typeof 一般只能返回如下几个结果:

number,boolean,string,function(函数),objectNULL,数组,对象),undefined

实例:

document.getElementById("demo").innerHTML = 
typeof "john" + "<br>" + 
typeof 3.14 + "<br>" +
typeof false + "<br>" +
typeof [1,2,3,4] + "<br>" +
typeof {name:'john', age:34};

尝试一下 »

我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错。

正因为 typeof 遇到 null,数组,对象时都会返回 object 类型,所以当我们要判断一个对象是否是数组时。

或者判断某个变量是否是某个对象的实例则要选择使用另一个关键语法 instanceof

instanceof

可通过 instanceof 操作符来判断对象的具体类型,语法格式:

var result = objectName instanceof objectType

返回布尔值,如果是指定类型返回 true,否则返回 false:

例:

arr = [1,2,3];
if(arr instanceof Array){
    document.write("arr 是一个数组");
} else {
    document.write("arr 不是一个数组");
}

尝试一下 »

513JavaScript typeof

1、定义

  • (1)undefined:是所有没有赋值变量的默认值,自动赋值。
  • (2)null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。

2、何时使用null?

当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null。

3、null 与 undefined 的异同点是什么呢?

共同点:都是原始类型,保存在栈中变量本地。

不同点:

(1)undefined——表示变量声明过但并未赋过值。

它是所有未赋值变量默认值,例如:

var a;    // a 自动被赋值为 undefined

(2)null——表示一个变量将来可能指向一个对象。

一般用于主动释放指向对象的引用,例如:

var emps = ['ss','nn'];
emps = null;     // 释放指向数组的引用

4、延伸——垃圾回收站

它是专门释放对象内存的一个程序。

  • (1)在底层,后台伴随当前程序同时运行;引擎会定时自动调用垃圾回收期;
  • (2)总有一个对象不再被任何变量引用时,才释放。

512JavaScript Break和Continue

关于 JavaScript 标签与 break 和 continue 一起使用的理解。

break 的作用是跳出代码块, 所以 break 可以使用与循环和 switch 等

continue 的作用是进入下一个迭代, 所以 continue 只能用于循环的代码块。

代码块: 基本上是{}大括号之间

然后:

1. 默认标签的情况(除了默认标签情况,其他时候必须要有名标签,否则会有惊喜)

当 break 和 continue 同时用于循环时,没有加标签,此时默认标签为当前"循环"的代码块。

当 break 用于 switch 时,默认标签为当前的 switch 代码块:

有名标签的情况

cars=["BMW","Volvo","Saab","Ford"];
list:
{
    document.write(cars[0] + "");
    document.write(cars[1] + "");
    document.write(cars[2] + "");
    break list;
    document.write(cars[3] + "");
    document.write(cars[4] + "");
    document.write(cars[5] + "");
}

上述break list;会跳出list的代码块。如果将break换成continue会有惊喜,违反了明确中的第二点,因为list只是个普通代码块,而不是循环。除非list写成如下形式list:

for(var i=0; i<10; ++i)
{
    continue list;
}

有了标签,可以使用break和continue在多层循环的时候控制外层循环。

例如下面:

outerloop:
for (var i = 0; i < 10; i++)
{
    innerloop:
    for (var j = 0; j < 10; j++)
    {
        if (j > 3)
        {
            break;
        }
        if (i == 2)
        {
            break innerloop;
        }
        if (i == 4)
        {
            break outerloop;
        }
        document.write("i=" + i + " j=" + j + "");
    }
}

511JavaScript while循环

定义了数组后对数组进行赋值,中间如有某些下标未被使用(即未被赋值),在遍历的时候,采用一般的 for 循环和 for...in 循环得到的结果不同。

for...in 循环会自动跳过那些没被赋值的元素,而 for 循环则不会,它会显示出 undefined。

点击下面的按钮,循环遍历

<button onclick="myFunction()">点击这里</button>
<p id="demo"></p>
<script>
function myFunction(){
    var array = new Array();
    var x;
    var txt=""
    array[0] = 1;
    array[3] = 2;
    array[4] = 3;
    array[10] = 4;
    for( x in array ){
        alert(array[x]);     // 依次显示出 1 2 3 4
    } 
    alert(array.length);    // 结果是11
    for( var i=0 ; i<4 ; i++){
        alert(array[i]);     // 依次显示出 1 undefined undefined 2 
    }
    document.getElementById("demo").innerHTML = txt;
}
</script>

尝试一下 »