首页 » JavaScript » JavaScript基础

JavaScript基础

对象 - 数组 - 字符串 -

简单调试技术

通过console.log()在控制台输出调试信息:

console.log("hello world");

通过alert()在浏览器弹出一个框,输出提示信息。

通过document.write()输出到当前的HTML页面中。

document.write("hello world!");

对象

一些对象的构造示例:

var obj = {};
var point = { x:0, y:0 };
var circle = { x:point.x, y:point.y, radius:2 };
var user = {
    "name" : "berlinix",
    "age" : 26,
    "man" : true,
};

在创建对象后,可以随时增删对象属性。添加属性:

user.mail = "unkown@berlinix.com";
user["city"] = "beijing";

添加(访问)属性有2种方法,一种为obj.member,另一种为obj["member"]。前一种是半动态的,属性名是标识符,可以在代码中为对象任意添加属性,但必须硬编码;后一种是完全动态的,属性名是字符串,可以在运行时为对象添加属性。像obj["member"]这样的对象,我们也称作关联数组,类似Perl的哈希。

JavaScript中函数也是对象,因此可为函数添加属性,如:

id_factory.id = 0;
function id_factory() {
    return id_factory.id++;
}

以上代码实现了每次调用id_factory()返回新的数值功能(更好的实现是用闭包)。

对象属性是动态生成的,可以用for in来遍历对象所有属性:

function to_str(user) {
    var s = "";
    for(var name in user) {
        s += name + "\n";
    }
    return s;
}

要测试对象是否有某个属性,可以用in表达式或直接与undefined对比:

if("website" in user) { }
if(user.website !== undefined) { }

删除对象属性用delete运算符。delete后,for/in不会枚举该属性,in也不会检测到该属性。

Window对象

常见Window对象方法列表:

方法说明
alert()弹出一个对话框,带一条消息和一个OK按钮。
confirm()弹出一个对话框,带一条消息和OK/Cancel按钮。
prompt()弹出一个对话框,带一条信息和一个输入框让用户输入。

常见用法:

alert("hello, world!");

var ret = confirm("submit your order?");
if(ret == true) { alert("submit!"); }
else { alert("don't submit!"); }

prompt(msg, default_value);
var username = prompt("Input your name", "myname");
alert("hello, " + username);

数组

数组的length属性,这是数组与对象的一个区别。

var arr = []
console.log(arr.length);        // 0
if("length" in arr) {
    console.log("arr has length property");
}
if(!arr.propertyIsEnumerable("length")) {
    console.log("arr length property cannot be enumerable");
}
for(var p in arr) {
    console.log(p);             // output nothing
}

输出:

$ node obj.js 
0
arr has length property
arr length property cannot be enumerable

JavaScript数组是稀疏的,length的值总为最大下标+1,如:

arr[99] = 0;
console.log(arr.length);        // output 100

数组下标必须是[0, 232-1)之间的整数,如果超出这个范围,或用负数、浮点数、布尔值、对象或其他值,JavaScript都会将其转为字符串,并作为对象的属性创建,而非数组的下标。

arr[99] = 1;
console.log(arr.length);        // output 100

arr[-1] = 1;
console.log(arr.length);        // output 100

当用负数作为下标,只是为arr对象添加了一个新属性"-1",arr的length没变。以下通过遍历arr对象,和遍历arr数组来查看这两次赋值的作用:

for(var p in arr) {             // ouput: 99 => 1, -1 => 1
    console.log(p + " => " + arr[p]);
}
for(var i = 0; i < arr.length; ++i) {       // only: 99 => 1
    if(arr[i]) console.log(i + " => " + arr[i]);
}

遍历arr的属性,"99"和"-1"都输出了;遍历arr数组的元素,只有下标99的元素输出。

字符串

切割字符串

s = "a,b,c,d";
ws = s.split(",");
for(i = 0; i < ws.length; ++i) {
    console.log(ws[i]);
};

正则表达式

match()函数

ret = string.match(regexp)

如果没有匹配,返回null;如果发现匹配,返回一个数组。

$ cat str-match.js 
var str = "The rain in SPAIN styas mainly in the plain";
var ret = str.match(/ain/gi);
console.log(ret);

输出:

$ node str-match.js 
[ 'ain', 'AIN', 'ain', 'ain' ]

分享

0