看完这pdf之后,明白了挺多关于javascript的一些疑问。
1、==和===区别
var foo = 42;
var bar = 42;
var baz = "42";
var qux = "life";
foo == bar 将判定为 true ,而 baz == qux 将判定为 false 。然而,尽 管 foo 和 baz 是不同类型, foo == baz 也将判定为 true 。
== 等性运 算符在判断等价性之前会尝试强制将操作数转为相同类型。这与 === 全等运算符 不同。
=== 全等运算符判断两个变量是否类型和值 都 相等。在这种情况下, foo === bar 仍然是 true , 而 foo === baz 将为 false . baz === qux 仍为 false .
2、之前有试过判断 11和11.0是否相等(===和==)?但是等到结果是相等(true)的。原因如下
JavaScript的数字只有一种类型 - 64位浮点数。这类似于Java的 'double'。不同于 其他编程语言,这里不需要区分整数类型,所以 1 和 1.0 是相同值。 在这章节,我们将学习如何创建数字和使用运算符(比如加减)。
3、声明变量前不需要声明数据类型?
JavaScript是一种 “弱类型” 语言, 这意味着你不需要明确的声明变量的数据类型。 你只需用 var 关键词来暗示你正在声明一个变量,解释器会从上下文(和引号)得出 你用的是什么数据类型,
4、javascript字符串连接是使用 + php 使用 .
5、编程思想
条件语句可以用来测试。条件判断在编程中非常重要,比如:
首先,无论程序运行使用什么数据,所有的条件都能被用来确定程序是否正常。如 果盲目的相信数据,你将陷入程序出错的麻烦。如果测试有效并且所需信息格式正 确,程序就不会出错,还会变得更稳定。采取这种预防措施的行为被称作防御性编 程。
6、获取字符串长度和数组的元素个数的方法:.length
var charLength = 'hello world'.length;
var arrLength = [1,2,3,4,6].length;
7、函数的两种形式:声明函数和函数表达式
函数声明,
sayHello(); 可以在函数声明之前调用函数,因为javascript有一个函数声明提前的机制。
function sayHello(){
console.log('hello world');
}
函数表达式
var sayHello = function(){
console.log('hello world');
}
8、javascript的对象
对象 Javascript的原始类型是 true , false , 数字, 字符串, null and undefined 。所有其他值都是 对象 . Javascript对象包含成对的 propertyName(属性名) : propertyValue(属性 值) 。
创建对象的方式有两种:
字面上:
var obj = {};
面向对象:
var obj = new Object();
var language = {
name: 'JavaScript',
isSupportedByBrowsers: true,
createdIn: 1995,
author:{
firstName: 'Brendan',
lastName: 'Eich'
}, // 是的,对象可以嵌套!
getAuthorFullName: function(){
return this.author.firstName + " " + this.author.lastName;
} // 是的,函数可以有值!
};
对象是不会被复制的。它们的传递靠引用。
var myPizza = {slices: 5};
var yourPizza = myPizza;
myPizza.slices = myPizza.slices - 1;
console.log(myPizza.slices); //4
var a = {}, b = {}, c = {}; // a, b, 和 c 都引用不同的空对象
a = b = c = {}; // a, b, 和 c 都引用同一个空对象
9、原型相关的知识
每个对象都与对象原型关联,继承了对象原型的属性。
所有对象创建时都从字面量对象( {} )继承,且都自动链接到的 Object.prototype,Object.prototype 来自JavaScript标准。
当JavaScript解释器(在浏览器中一个模块),试图找到一个属性,它要检索,如 下面的代码:
var adult = {age: 26},
retrievedProperty = adult.age;
// 看上一行
首先,解释器检查对象有的每个属性。例如, adult 只有一个自己的属性 - age 。
但是,除此之外,实际上还有几个属性,这是继承自Object.prototype。
var stringRepresentation = adult.toString(); // 变量的值为 '[object Object]'
toString 是一个 Object.prototype 的属性, 这是继承。它有一个函数,
返回值为 一个对象的字符串。如果希望它返回一个更有意义的东西,
那么你可以将其覆盖。 简单的添加一个属性到adult对象。
adult.toString = function(){
return "I'm "+this.age;
}
如果现在调用 toString 函数,解释器将发现一个新的对象中的属性然后停止。
解释器解析某个属性时会先检查对象自己,再进一步检查他的原型。
要设置自己的对象为原型而不是默认的Object.prototype,你可以调用以下 的 Object.create :
var child = Object.create(adult);
/* 通过这种方式创建的对象可以让我们轻松
替换默认的Object.prototype成我们想要的。
在这里,child的原型是adult对象。 */
child.age = 8;
/* 在此之前,child根本没有自己的年龄属性,
解释器会寻找child的原型中是否有该属性。
现在,当我们设置了child自身年龄,解释器
就不深入寻找了。 注意:adult的年龄仍为26。 */
var stringRepresentation = child.toString(); // 值为 "I'm 8"。
/* 注意:我们没覆盖child的toString属性,
因此adult类函数不会被调用。如果adult没有toString属性,
那么Object.prototype的toString类函数将被调用,
我们将得到"[object Object]" 而不是 "I'm 8" 。 */
child '的原型是 adult ,其原型为 Object.prototype 。这一系列原型被称为 原型链。
10、销毁:
delete 被用来从一个对象中 删除一个属性 。它将删除对象中的一个存在属性, 使其不再存在于原型链中。
从一个对象中删除一个属性就是将改属性从原型中移 出:
var adult = {age: 26}
child = Object.create(adult);
child.age = age
delete child.age;
/* 从child中删除age属性,表明这之后该属性不在被覆盖 */
var prototypeAge = child.age;
// 26,因为该孩子没有自己的age属性。
从上知,child的原型是 adult,而adult的原型是Object.prototype,child的属性age被销毁,那就会到它的原型中找age这个属性,因为adult的age属性是26,所以是26
11、枚举
枚举 for in 语句可以遍历对象中所有的属性。枚举包括函数和原型属性。
var fruit = { apple: 2, orange:5, pear:1 },
sentence = 'I have ', quantity;
for (kind in fruit){
quantity = fruit[kind];
sentence += quantity+' '+kind+ (quantity===1?'':'s')+ ', ';
} // The following line removes the trailing coma.
sentence = sentence.substr(0,sentence.length-2)+'.';
// I have 2 apples, 5 oranges, 1 pear.
12、全局化
如果想开发一个模块,它可以在网页上运行或也可以运行其他模块,
因此你必须注 意变量名是否重复。 假设我们正在卡开发一个计数器模块:
var myCounter = {
number : 0,
plusPlus : function(){
this.number : this.number + 1;
},
isGreaterThanTen : function(){
return this.number > 10;
}
}
注意: 这个技巧通常配合闭包使用,以使来自外部的内部状态不变。
模块使用唯一一个变量名 — myCounter 。如果其他模块使用名字比如 number 或 isGreaterThanTen ,
这样就会很安全,因为不会覆盖每个其他的值。
learn javascript 中文版pdf 百度云盘: http://pan.baidu.com/s/1gftPLmV kn3y 传送门