Javascript 教程 在线

470JavaScript数据类型

注意 undefined 和 null 都是小写,并且。

var x,y;
if(x == null){
    document.write(x);
}
if(y == undefined){
    document.write(y);
}

二者都会输出 undefined

469JavaScript数据类型

就算变量定义的是数组格式,typeof 返回的数据类型还是 object :

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
document.write(typeof cars); // object

如果你要判断该对象是否为数组,可以使用以下两种方法:

1、使用 isArray 方法

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
// 判断是否支持该方法
if (Array.isArray) {
    if(Array.isArray(cars)) {
        document.write("该对象是一个数组。") ;
    }
}

2、使用 instanceof 操作符

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";

if (cars instanceof Array) {
    document.write("该对象是一个数组。") ;
}

468JavaScript数据类型

最常用的对象创建方式:

第一种:

function Demo(){
    var obj=new Object();
    obj.name="张思";
    obj.age=12;
    obj.firstF=function(){
    }
    obj.secondF=function(){
    }
    return obj;
}

var one=Demo();
// 调用输出
document.write(one.age);

第二种:

function Demo(){
    this.name="张思";
    this.age=12;
    this.firstF=function(){
    }
    this.secondF=function(){
    }
}

var one=new Demo

// 调用输出
document.write(one.age);

467JavaScript数据类型

数组有四种方式:

var arr1 = new Array('a', 'b', 'c');    //这是一个预定义的数组,在创建时初始化
var arr2 = ['a', 'b', 'c' ];       //同样是在创建时初始化,但是这种创建更为简洁直观
var arr3 = new Array( );   var arr4 = [ ];     //这两种是创建空的数组

在数组操作中,最值得注意的是下标的使用,容易出错

对象的创建,一般推荐使用

var people = {name : 'Tom', age : 21 , eat : function(){  }    }

也可先创建对象再追加属性和方法

var people = new Object();
people.name = 'Tom';   
people.age = 21;  
people.eat = function(){  }

466JavaScript变量

JavaScript 允许重复声明变量,后声明的覆盖之前的

var a = 1;
var a = 'x';
console.log(a);
// 输出 'x'

JavaScript 允许重复定义函数

JavaScript 没有重载这个概念,它仅依据函数名来区分函数。

后定义的同名函数覆盖之前的,与参数无关。

function test() {
    console.log("test");
}
test();     //输出 "test arg0 + undefined"

function test(arg1) {
    console.log("test arg" + arguments.length + " + " + arg1);
}
test(1,2);  //输出 "test arg2 + 1"

实参个数如果比形参少,那么剩下的默认赋值为 undefined,如果实参传的比形参数量多,那么是全部都会被传进去的,只不过没有对应的形参可以引用(但可以用 arguments 来获取剩下的参数)。

function test(arg1) {
    for(var i=0; i<arguments.length; i++) {
        console.log(arguments[i]);
    }
}
test(1,2); //输出 1 2

变量与函数重名的时候,变量生效

这涉及到了变量和函数的预解析:

  • 变量声明会被顶置,函数声明也会被顶置且比变量更先声明。
  • 变量的声明和赋值语句一起写时,JS引擎在解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置。
  • 声明过的变量不会再重复声明。
var a = 100;
function a() {
    return "function";
}
console.log(a);     //输出 100
console.log(a());   
/*
报错
Uncaught TypeError: a is not a function
    (anonymous function) @test.html:9
*/

JS 中有两种函数,一种是普通函数,一种是函数对象。下面的这种就是“函数对象”,它实际上是声明一个匿名函数,然后将该函数的 init 方法赋值给该变量。

var a = 100;
var a = function() {
    return "function";
}
console.log(a);
/* 
输出
function() {
    return "function";
}
*/
console.log(a());   //输出 "function"

函数与内部变量重名

定义普通函数,即在 window 变量下,定义一个 key,它的名字为该函数名,值为该函数的地址。函数内部的 this 指向 window 对象。

function a() {
    console.log(this);  //输出 window{...}
    this.a = 1;         //即 window.a = 1,此时window下的function a已经被该变量覆盖了。
    var a = 5;          //下面的这几个变量都是局部变量,仅在花括号范围内有效。  
    a = 10;
    var v = "value"
    return "function";
}
console.log(a);         //输出 function a {...}
console.log(a());       //输出 "function"
console.log(a);         //输出 1
console.log(v);
/*
输出
Uncaught ReferenceError: v is not defined
    (anonymous function) @ mycolor.html:15
*/