learn javascript中文版,笔记总结————呱呱二号

看完这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      传送门

posted @ 2017-11-09 13:11  呱呱二号  阅读(245)  评论(0编辑  收藏  举报