javascript headfirst读书笔记

1、函数

1.1 函数为什么可以放在文件的任何位置?

实际上,浏览器分两遍读取网页,第一遍读取所有的函数定义,第二遍开始执行代码,因此可以吧函数放在任何位置。
函数名后面加括号 表示调用函数

1.2 函数的声明方式

  • 标准声明
  • 函数表达式
<script type="text/javascript">
window.onload = function (){
	quake(2)
	fly()

} 

// 标准的函数声明
function quake(num) {
	for (var i =0 ;i<num;i++) {
		console.log("quake: "+i)
	}
}
// 函数表达式 ,fly变量存储的是函数的引用或者指针
var fly = function(){
	console.log("I can fly!")
}
</script>

2、对象

2.1 如何创建对象

//添加一个对象变量声明
//接下来,使用左花括号开启对象定义
  var chevy = {
      make:"Chevy",
      model:"Bel Air",
      year:"1957"
  }
  // chevy只是一个变量,变量实际上不存储对象,变量存储的是指向对象的引用


也可以创建不包含任何属性的对象   var person  = { };
试图访问不存在的属性是,返回的结果是 undefined

2.2 随时增删属性

chevy.dogYears=2;
delete chevy.dogYears;

2.3 给对象添加新的属性(方法)

 var chevy = {
      make:"Chevy",
      model:"Bel Air",
      year:"1957",
      start:false,
      drive: function(){
          this.start =true
      }
  }

2.4迭代对象的属性

for(var prop in chevy) {
    console.log(prop+":"+chevy[prop])
}

2.5 javascript提供的对象

  • Date
  • Math
  • RegExp
  • JSON

2.6 浏览器提供的对象

  • Document
  • Window
  • Console

3 与网页交互

3.1 网页加载完毕后运行代码

<script>
    window.onload = function () {
        .....
    }
</script>

4、 类型

4.1 undefined

undefined表示还没有值,即没有初始化的东西。
undefined是一个值,他也有类型,它的类型就是undefined。
不能够吧undefined和字符串"undefined"混为一谈

4.2 typeof作用

typeof 用来返回操作数的类型,返回值类型是字符串
typeof obj // 可能返回“string”、“boolean”、“number”、“object” 、"undefined"等

4.3 坑人的javascript对象null

javascript诞生时的想法是用undefined表示变量还没有初始化,用null表示 在应该提供一个对象 却没法创建或者找不到时提供null。
总之null用于表示对象不存在,null的类型是object

4.4 NAN

NAN 表示无法表示的数值结果(not a number),
NAN 是javacript中唯一一个与自己不相等的家伙
NAN !=NAN
判断一个变量是否是NAN的方法 isNaN(obj)
有个地方要骂娘了,既然NAN表示not a number 但是typeof一个NAN对象,返回值是"number" 狗血!!!!

4.5 javascript相等运算符

==

如果两个变量的类型相同,那么直接比较,如果类型不同,先转换为相同的类型,再比较
=== 仅当两个变量类型和值都相等时,它们才相等

4.6 javascript中的假值

  • undefined
  • NaN
  • null
  • 0
  • 空字符串

5 原型

5.1 使用原型创建对象

javascript对象可以从其它对象那里继承属性和行为,其中行为被继承的对象成为原型

5.2 为什么可以使用原型实现继承

因为javascript先从对象实例中查找属性,如果查找不到,再去原型中查找

5.3 原型从哪里来

任何对象的都具有原型属性,如果你查看对象的构造器属性 就会发现prototype属性

	var obj2 = new OBJ();
	console.log(OBJ)

5.4 原型是动态的

给原型添加新的属性和方法后,继承该原型的所有对象实例将立即看到它,只要它们没有重写该属性。

5.5 判断属性是在原型中定义的还是在对象实例中定义的

如果obj.hasOwnProperty(“属性名”) 返回true,说明是在对象实例中定义的,如果返回false,但是又能够访问它说明是在对象中定义的。

5.6原型链

对象不仅可以继承一个原型的属性,还以继承一个原型链。
原型链示例:

<script>
// javascript一切皆对象 包括函数、构造器、...
window.onload = function(){
	var showdog = new ShowDog("金毛",3,"驯兽师1号")
	showdog.bark()
	showdog.show()
}
// 普通小狗原型
function Dog (name,age) {
	this.age =age;
	this.name = name;
}
Dog.prototype.bark = function () {
	console.log(this.name+"汪汪!")
}
//表演犬原型
function ShowDog (name,age,handler) {
	//this.name = name;
	//this.age = age;
	Dog.call(this,name,age)//复用Dog构造函数
	this.handler =handler;
}

ShowDog.prototype = new Dog() // 继承普通小狗的原型
//表演犬原型增加表演方法
ShowDog.prototype.show = function () {
	console.log(this.handler+"指挥着"+this.name+"表演ing!")
}
</script>

6、setTimeout

6.1 setTimeout()基本使用

 setTimeout()基本使用
setTimeout() 第一个参数可以是字符串(最好不要用,再用字符串拼接执行到的函数时候 容易报undefined,具体原因后面会说到),也可以是函数对象。
上面的写法本身没有什么太大问题 ,但是我们最好避免下全局变量的使用,因此我们可以改进下 使用原型创建对象像这样:

 setTimeout()基本使用

6.2 setTimeout原理

setTimeout属性是挂载在window对象下的,因此延时函数中的this始终都是指向window对象的(特别注意,在做亲子视频中心封面上传时 在这里浪费了很多时间)

6.3 setTimeout踩坑

一、前面说到过延时函数中的this始终都是指向window对象的
二、如果延时函数需要传递参数,如果延时函数的形参是字符串类型,那么第一个参数使用字符串拼接(形参前后需要加上单引号),那么问题不大。但是如果形参是一个对象类型,那么字符串拼接的方法便不正确,因为字符串加对象拼接后变成了[object Object] ,不满足setTimeout的第一个参数是最终变成了check(’[object Object]’),所以得不到正确的结果
在这里插入图片描述
因此如果延时函数需要传递参数,并且参数类型是对象 正确的写法像这样写:

setTimeout(function(){
    延时函数名(形参)
}1000)

在这里插入图片描述

参考资料:
https://bbs.csdn.net/topics/392162289
https://www.cnblogs.com/yuqingfamily/p/5816560.html
本文所有源代码在我的资源里可以下载https://download.csdn.net/download/qq_36719449/12187386

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值