Closed DeanPaul closed 6 years ago
第一章 JavaScript 简介 1.2 JavaScript 实现
一个完整的JavaScript 实现应该由下列三个不同的部分组成。 核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM)
1.2.2 文档对象模型(DOM)
在阅读DOM标准的时候,读者可能会看到DOM0 级(DOM Level 0)的字眼。实际上,DOM0 级标准是不存在的;所谓DOM0 级只是DOM 历史坐标中的一个参照点而已。具体说来,DOM0级指的是Internet Explorer 4.0 和Netscape Navigator 4.0 最初支持的DHTML。
1.2.3 浏览器对象模型(BOM)
浏览器对象模型(BOM,Browser Object Model),HTML5 致力于把很多BOM 功能写入正式规范从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的JavaScript 扩展算作BOM的一部分。下面就是一些这样的扩展: 弹出新浏览器窗口的功能; 移动、缩放和关闭浏览器窗口的功能; 提供浏览器详细信息的navigator 对象; 提供浏览器所加载页面的详细信息的location 对象; 提供用户显示器分辨率详细信息的screen 对象; 对cookies 的支持; 像XMLHttpRequest 和IE 的ActiveXObject 这样的自定义对象。
navigator :http://blog.csdn.net/j_bleach/article/details/61206039
1.4 小结 JavaScript 是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: ECMAScript,由ECMA-262 定义,提供核心语言功能; 文档对象模型(DOM),提供访问和操作网页内容的方法和接口; 浏览器对象模型(BOM),提供与浏览器交互的方法和接口。
第二章 在HTML 中使用JavaScript 2.3 文档模式 Doctype 混杂模式(quirks mode)①和标准模式(standards mode)
第三章 基 本 概 念 语法 数据类型 流控制语句 函数
strict mode == ===
var obj1 = { valueOf:function(){return 20;}}
var obj2 = { valueOf:function(){return 'a';}}
var str1 = 'a';
var str2 = new String('a');
var obj3 = { valueOf:function(){return true;}}
Questions:
1. If a==b b==c, 是否能证明 a==c?
2. obj1 == 20
3. obj2 == str1
4. obj2 == str2
5. str1 == str2
6. obj3 == 1
valueOf 在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而true 转换为1; 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值; 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型 值按照前面的规则进行比较; 这两个操作符在进行比较时则要遵循下列规则。 null 和undefined 是相等的。 要比较相等性之前,不能将null 和undefined 转换成其他任何值。 如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。重要提示:即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN 不等于NaN。 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。
switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串"10"不等于数值10)。
函数
function func1(arg1){
arguments[0].test = 2;
console.log(arg1)
}
var param1 = {test:45}
func1(param1)
console.log(param1 )
-----------------------------------------------
function func2(arg1){
arg1 = {};
}
var param1 = {test:45}
func2(param1)
console.log(param1 )
---------------------------------------------------
function func3(arg1){
arguments = [];
arguments [0]={};
arguments [0].test = 555;
}
var param1 = {test:45}
func3(param1)
console.log(param1 )
Apply/Call 区别:func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
定义一个log方法,让它可以代理console.log的方法,我们要给每个log方法添加一个”(app)”前缀,比如’hello world!’ ->'(app)hello world!’ 在Javascript中什么是伪数组?如何将伪数组转化为标准数组?
var bus = function() {
this.maxSpeed = 100;
this.minSpeed = 10;
this.show = function () {
console.log('maxSpeed:' + this.maxSpeed + ' this.minSpeed:' + this.minSpeed);
}
};
/*
bus.constructor = function (a, b) {
this.maxSpeed = a;
this.minSpeed = b;
}
*/
bus.prototype.constructor = function (a, b) {
this.maxSpeed = a;
this.minSpeed = b;
}
var t = new bus(1000,9);
t.show();
t.constructor(200,20);
t.show();
var man;
(function(){
function Father (name) {
this.name = name;
}
Father.prototype.sayName= function () {
console.log(this.name);
}
man = new Father('aoyo');
})()
man.sayName();//aoyo
console.log(Father); //Father is not defined
man.constructor.prototype.sayAge = function(age){
console.log(age);
}
man.sayAge('20'); //20
function Base() {}
// Sub1 inherited from Base through prototype chain
function Sub1(){}
Sub1.prototype = new Base();
Sub1.prototype.constructor = Sub1;
Sub1.superclass = Base.prototype;
// Sub2 inherited from Sub1 through prototype chain
function Sub2(){}
Sub2.prototype = new Sub1();
Sub2.prototype.constructor = Sub2;
Sub2.superclass = Sub1.prototype;
// Sub3 inherited from Sub1 through prototype chain
function Sub3(){}
Sub3.prototype = new Sub2();
Sub3.prototype.constructor = Sub3;
Sub3.superclass = Sub2.prototype;
// Test prototype chain
console.log(Sub2.prototype.constructor);// function Sub2(){}
console.log(Sub2.superclass.constructor);// function Sub1(){}
console.log(Sub2.superclass.constructor.superclass.constructor);// function Base(){}
console.log(Sub3.superclass.constructor.superclass.constructor.superclass.constructor);// function Base(){}
function F() {}
F.prototype = {
_name: 'Eric',
getName: function() {
return this._name;
}
};
var f = new F();
alert(f.constructor === F); // output false
f.constructor===Object
function F() {}
F.prototype = {
constructor: F, /* reset constructor */
_name: 'Eric',
getName: function() {
return this._name;
}
};
构造函数上怎么还有一个 constructor ?
console.log(typeof Array.constructor != 'undefined');// output true
console.log(typeof Array.prototype.constructor === Array); // output true
console.log(Array.constructor === Function);// output true
console.log(Function.constructor === Function); // output true
var obj1 = { value:1};
var obj2 = obj1;
ojb2.t = 1;
obj1.value = 20;
console.log(obj1 == obj2);
console.log(obj1 === obj2);
var b = {t:1}
function f1 (a){
a.t = 'a';
console.log(a==b);
console.log(a===b)
}
f1(b)
《JavaScript 高级程序设计》 第一章 JavaScript 简介 第二章 在HTML 中使用JavaScript 第三章 基 本 概 念