JavaScript笔记(2)

1 JavaScript创建对象的方式
var obj = new String();
obj = new Object;//Object本身也是对象
alert("obj对象的构造函数为:" + obj.constructor);
alert("Object对象的原型为:" + Object.prototype);

注:不推荐第一种创建对象的方式,不要省略那一对小括号。

2 JavaScript访问属性的方式
var a = new Object();
a.x = 1;
alert(a.x);//第一种访问属性的方式
alert(a["x"]);//第二种访问属性的方式
alert(a.constructor.prototype);
alert(a["constructor"]["prototype"]);


3 JavaScript添加属性的方式
var a = new Object();
a.x = 1;//生成变量属性
a["func"] = function(){//生成函数属性
    ++this.x;//this表示对象a本身
}
a.func();
alert(a.x);//显示为2



4 JavaScript的内置对象


【1】Global对象

(1)Global对象是JavaScript对象模型中的最高级,一切声明的变量和函数都是它的属性。在浏览器中的Global对象就是windows对象。例:
//声明和定义windows对象的属性。
var PI = "PI的值为:";
var value = "3.1415926";
function getPI(){
    var value = "3.14";//注意这里的局部变量
    alert((this === window) + "\n" + this.PI + this.parseFloat(this.value));
}
window.getPI();
结果为:true
PI的值为:3.1415926

(2)关于this指针

(2.1)在全局执行环境中使用this,表示Global对象,在浏览器中就是windows对象。
(2.2)在函数执行环境中使用this时,情况就比较复杂了。如果函数没有明显的作为非windows对象的属性,而只是定义了函数,不管这个函数是不是定义在另一个函数中,这个函数中的this仍然表示windows对象。如果函数显示地作为一个非windows对象的属性,那么这个函数中的this就代表这个对象。例如:
var o = new Object();
o.func = function() {//对象o的func属性为一个函数
    alert("作为属性的函数: " + (this === o));//判断this是否为函数所绑定的对象
    (function(){//创建一个内部匿名函数并执行
        alert("普通函数: " + (this === window));//判断this是否为windows对象
    })();
}
o.func();
结果为:作为属性的函数: true
普通函数: true


【2】Object对象

(1)Object对象是所有对象的基础,任何其他对象都是从Object对象扩展而来。

(2)任何对象都包含一个Prototype属性,这个属性本身也是一个对象。当程序试图获取对象中的属性(以String对象的a属性为例)时,会执行以下步骤:
(2.1) 查找String对象本身是否有名为a的属性,如果有,返回程序。
(2.2) 查找String对象的prototype属性对象(Sp)中是否有名为a的属性,如果有,返回程序。
(2.3) 继续查找上一级原型对象的prototype属性(注:这里不会查找原型对象的a属性)的a属性,直到上一级原型对象为null。
例如:

Object.prototype.a = 3.14;
Object.b = 1024;
alert("Object对象的实例: " + new Object().a);
alert("String对象: " + String.a);
alert("String对象: " + String.b);
结果为:Object对象的实例: 3.14
String对象: 3.14
String对象: undefined

【3】Function对象
当使用function关键字定义一个函数时,实际上是创建了Function类的一个对象实例。下面例子是等价的:
var func1 = new Function("a", "b", "return a - b");
alert(func1(3, 4));

var func2 = function(a, b){
    return a - b;
}
alert(func2(3, 4));


(3.1)一个函数重用的实例:
Object.prototype.shift = function(){
    alert(this.color);
}

var redCar = new Object();
redCar.color = "红色";

var blueCar = new Object();
blueCar.color = "蓝色";

redCar.shift();
blueCar.shift();
结果为:红色
蓝色

【4】Array对象
(4.1)删除元素
var arr = new Array(1, 2, 3);
arr.splice(1, 1);//从一个数组中移除一个或多个元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素。函数原型是:arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
alert("数组长度为: " + arr.length + "\n内容为: " + arr);
结果为:数组长度为: 2
内容为: 1,3
(4.2)排序算法
var arr = new Array(4, 9, 3, 8, 15);

//从小到大排序
arr.sort(function(a, b){return a - b;});//自定义排序规则
alert("从小到大:" + arr);

//反置数组中的元素顺序
arr.reverse();
alert("从大到小:" + arr);


【5】String对象
(5.1)通过一对双引号(或单引号)创建的变量是String类型的一个值,String类型表示字符串类型,是基本类型
(5.2)内置对象String是一个构造函数,类型是Function。
(5.3)通过new操作符来调用String构造函数创建的String实例对象,是Object类型的一个值,Object类型表示对象类型,不是基本类型。
//定义一个String基本类型的变量
var str = "abc";

//通过String构造函数创建一个Object类型的字符串对象
var strObj =  new String("abc");

alert("str的类型: " + (typeof str)
    + "\nstrObj的类型: " + (typeof  strObj)
    + "\nString的类型: " + (typeof String));


【6】Date对象
通过创建Date构造函数的实例对象,可以获取计算机中的时间。
var now = new Date();
alert(now);
//结果为:Tue Sep 23 2014 10:36:58 GMT+0800

//时间比较(可以直接使用大于或者小于号,但是不能使用等号,这个操作会被系统认为是比较两个变量是否引用了同一个对象)
var a = new Date();
var b = new Date(1900, 1, 1);//参数列表依次为年、月、日、分钟数、秒数、毫秒数
alert(a > b);//结果为true

var a = new Date();
var b = new Date();
alert(a == b);//false
//连续获取两个时间快照,在正常情况下不会达到毫秒误差,所以结果是true
alert(a.valueOf == b.valueOf);
alert("当前年份: " + a.getYear()
    + "\n距时间基点相差: " + parseInt(a/(24 * 60 * 60 * 1000 * 365)));


【7】RegExp对象
(7.1)创建正则表达式对象
一共有两种方式创建正则表达式对象,第一种方式实际是调用第二种方式(RegExp构造函数)。
//创建方式1
var regExp = /^http[s]?:\/\//;
alert(regExp.test("http://"));//结果为true

//创建方式2
regExp = new RegExp("^http[s]?:\/\/");
alert(regExp.test("https://"));//结果为true

//如果匹配模式需要动态改变是,创建方式1就无法使用了,只能使用方式2
var head = "http";
regExp = new RegExp("^" + head + ":\/\/");


(7.2)匹配表达式
/表达式/:两个斜杠之间放入表达式语句。
var str = "hi` everyone";
str = str.replace(/hi/, "hello");///hi/表示正则表达式
alert(str);
//结果为hello` everyone


【8】Math对象
(8.1)Math.tan(n):计算n的正切值。
(8.2)Math.sin(n):计算n的正弦值。
(8.3)Math.sqrt(n):计算n的平方根。
(8.4)Math.power(n, m):计算n的m次方。
(8.5)Math.abs(n):计算n的绝对值。

你可能感兴趣的:(JavaScript)