看完这pdf以后,明白了挺多关于javascript的一些疑问。javascript
一、==和===区别php
var foo = 42;java
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 .app
二、以前有试过判断 11和11.0是否相等(===和==)?可是等到结果是相等(true)的。缘由以下编程语言
JavaScript的数字只有一种类型 - 64位浮点数。这相似于Java的 'double'。不一样于 其余编程语言,这里不须要区分整数类型,因此 1 和 1.0 是相同值。 在这章节,咱们将学习如何建立数字和使用运算符(好比加减)。
三、声明变量前不须要声明数据类型?
JavaScript是一种 “弱类型” 语言, 这意味着你不须要明确的声明变量的数据类型。 你只需用 var 关键词来暗示你正在声明一个变量,解释器会从上下文(和引号)得出 你用的是什么数据类型,
四、javascript字符串链接是使用 + php 使用 .
五、编程思想
条件语句能够用来测试。条件判断在编程中很是重要,好比:
首先,不管程序运行使用什么数据,全部的条件都能被用来肯定程序是否正常。如 果盲目的相信数据,你将陷入程序出错的麻烦。若是测试有效而且所需信息格式正 确,程序就不会出错,还会变得更稳定。采起这种预防措施的行为被称做防护性编 程。
六、获取字符串长度和数组的元素个数的方法:.length
var charLength = 'hello world'.length;
var arrLength = [1,2,3,4,6].length;
七、函数的两种形式:声明函数和函数表达式
函数声明,
sayHello(); 能够在函数声明以前调用函数,由于javascript有一个函数声明提早的机制。
function sayHello(){
console.log('hello world');
}
函数表达式
var sayHello = function(){
console.log('hello world');
}
八、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 都引用同一个空对象
九、原型相关的知识
每一个对象都与对象原型关联,继承了对象原型的属性。
全部对象建立时都从字面量对象( {} )继承,且都自动连接到的 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 。这一系列原型被称为 原型链。
十、销毁:
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
十一、枚举
枚举 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.
十二、全局化
若是想开发一个模块,它能够在网页上运行或也能够运行其余模块,
所以你必须注 意变量名是否重复。 假设咱们正在卡开发一个计数器模块:
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 传送门