《JavaScript权威指南》学习笔记 第二天 下好一盘大棋
前段学习js的时候总是零零散散的,以至于很多东西都模棱两可。时间稍微一久,就容易忘记。最主要的原因是这些东西,原来学的时候就不是太懂,以至于和其他知识无法形成记忆链,所以孤零零的知识特别容易忘记。重温犀牛书,加上最近对记忆宫殿的记忆方法有点感兴趣,于是结合起来来做笔记。
开始吧,上去先扔一张我画的js的数据类型。后面的所有东西,基本上都是基于这张图的。
原始类型没啥说的,就是string,number ,boolean 。
对象类型包括 对象。其实还有Array, func 也是特殊的对象。 对象其实就是一个键值对,在php里面叫关联数组。值可以是原始类型即string, boolean、number,当然也可以还是一个对象。
这里面有两个特殊的东西,叫null和undefined。null在各种语言里都比较常见。在js里面null == undefined。这两个特殊的东西,叫做特殊的原始值,因为其数据类型就是其值,其值不能被修改(不可变 immutable).null和undefined的区别在哪里呢?区别在于null常表示我们程序级别的,正常的空值。如变量没有赋值的时候,到了浏览器语法检查的时候,会在该变量作用域的顶部声明该变量,这个时候给这个变量赋的值就是null.但是当该变量不存在的时候,下面却调用了,就会报undefined,因此可以认为undefined是系统级别的,类似于语法错误。
有对象就有类,对象是实例化的类。js的对象是一个大对象,当create一个页面的时候,就会被js构造器(construct)创造出来 数组对象(Array)、函数对象(function)、日期对象(date)、正则对象(RegExp)以及错误对象(Error).这点稍后会详细的讲下。
上面是从从数据类型维度来区分js的值的。数据类型是后面的基础,从是否拥有方法又可以区分,可以拥有方法的类型,不拥有方法的类型。可变的类型,与不可改变的类型、
从拥有方法来讲,其实原始类型是不拥有方法的,但是js的特殊性却让原始类型也拥有了方法。比如toString()的方法。这些不拥有方法的类型在调用方法的时候,会先变成包装对象(一个调用后立即销毁的对象),所以原始类型也是拥有方法的类型。但是特殊的类型 null 与 undefined 不拥有方法,因为其值不允许被改变,有方法有个毛用啊。
从值可变与不可变的角度来说。原始类型的值是不能被改变的。平时在使用的过程中,确实发现其值改变了,那是因为我们将改变后的值赋给了新的变量。其原变量本身是没有变化的。字符串是由字符组成的数组,这点和C语言一样,比较好理解。
直接量:
什么叫直接量,就是简单直接粗暴的赋值。类似 var a = 3;
直接量,直接赋值。区别于调用new String() new Number() 来产生的变量。使用直接量,程序没有执行的时候,并不知道值得类型,等到语法解析编译的时候,才会根据其具体的值,指定变量类型。因此这样的方式声明的变量就叫做直接量。
全局对象
浏览器启动,create一个新的页面。js的全局对象已经被创造好了。也就是一个大对象生下了一堆小对象。对于大对象来说,这是一堆小对象,但是对于我们来说。他们仍是一个对象类,我们需要去实例化。
大对象生出了一堆东西:
全局属性: undefined、Infinity、Nan
全局函数:isNaN() 、parseInt() 、eval()
构造函数:(我更喜欢称为构造类)Date() 、RegExp()、String() 、Object() 、Array(). 之所以称为是构造函数,是因为我们也可以直接把他们当做函数使用,在原始类型变成对象的时候,也充当包装对象。
全局对象: Math() 、JSON。
包装对象
这个名字起的比较好。假设原始类型string 、number 、boolean 分别是烤鸡、烤鸭、烤兔。当他们变成商品(对象)去卖的时候、就会包上一层包装纸,锡箔纸、包装袋。但是这个包装纸的作用是有限的,当其完成其固有的作用的时候,就会被丢弃(包装对象被销毁)。
所谓的包装对象就是用完就丢弃,就像物品的包装袋一样。
类型转换:
这个分为原始类型之间的转换、对象之间的转换、原始类型转为对象、对象转为原始类型三部分。
原始类型之间互转主要通过内隐的方法进行自动转换,也可以调用系统的构造函数。
原始类型变对象,通过包装对象。
对象变原始类型。主要是变成字符串和数字两种。 通过调用对象内的一个魔术方法。这个原理和php里面的将变量变成当成字符串输出的原理是一样的。
变量作用域与作用域链:
这种东西,画个图什么的,就清晰多了。
A的变量作用域在A - E,B的变量作用域在B-E,以此类推E的变量作用域在E。
但是E想使用A的一个变量怎么办,js不像人一样聪明,直接去D拿,况且js也不知道变量在哪。E先问D有没有,D要没有了,再问C,C没有了问B,最后一直问到A。如果A也没有咋办,E发现自己上当受骗了,于是跑到顶层全局对象Error() 那里告状,然后在页面上引发一个ReferenceError(叫你不给我,哼!)的错误。这点很像冒泡,也许冒泡就是从这里面来的吧。
这就是JS的作用域链。
天寒,晚安。
《JavaScript权威指南》学习笔记 第二天 下好一盘大棋的更多相关文章
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- JavaScript权威指南学习笔记6
这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...
- javascript权威指南学习笔记1
打开这本书,进入到javascript的世界.以前都是看各种视频,感觉什么收获也没有,反而弄得脑袋混乱,希望能够按照这本书的节奏掌握javascript这门语言,为我的前端学习打下基础. 学习前准备: ...
- JavaScript权威指南学习笔记5
下午在杭图回去前看了书中第二部分的13-17章,看的很粗,感觉大部分东西自己已经知道或者平时开发中不会用到,很多章节只是简单的翻了一下,没有仔细思考里面说到的道理,下面对各章节简单的记录下. 第13章 ...
- Javascript权威指南学习笔记
第二章:词法结构 ;function a(){alert(2)};//前面的分号保证正确地语句解析 第三章:类型.值和变量 基本概念: 1.数据类型---能够表示并操作的值的类型叫做数据类型. 2.变 ...
- javascript权威指南学习笔记3
今天看到第四章,记录一下其中的几个点,俗话说:好记性不如烂笔头嘛. 4.9 in运算符和instanceof运算符 in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个 ...
- JavaScript权威指南学习笔记4
今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...
- javascript权威指南学习笔记2
Javascript语言核心(2~12章) 第三章:类型.值.变量 1.数字: overflow(Infinity, -Infinity).underflow(+0,-0) 非数字值:它和任何值都不相 ...
- HTTP权威指南-学习笔记
目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...
随机推荐
- 一起写一个JSON解析器
[本篇博文会介绍JSON解析的原理与实现,并一步一步写出来一个简单但实用的JSON解析器,项目地址:SimpleJSON.希望通过这篇博文,能让我们以后与JSON打交道时更加得心应手.由于个人水平有限 ...
- Sql 2012 远程数据库连接
新装好的数据库,各种远程连接设置都设置好后.发现还是连接不上. 这时候,问题可能出在端口上,远程连接的时候需要指明端口.动态端口一般都会变.在本机连接时候,会自动选择端口.在远程访问时候,就必须要指明 ...
- 转一篇关于如何在Unity里使用Protobuf
原帖地址: http://purdyjotut.blogspot.com/2013/10/using-protobuf-in-unity3d.html 先转过来,等时间合适了,再来收拾 Using P ...
- nios II--实验5——定时器硬件部分
定时器 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> ...
- Rootkit Hunter恶意程序查杀
恶意程序,恶意代码检测 下载:https://pkgs.org/search/rkhunter 安装:rpm -ivh rkunter* Installed: #需要先安装 lsof.x86_64 ...
- linux基础-第十二单元 硬盘分区、格式化及文件系统的管理一
第十二单元 硬盘分区.格式化及文件系统的管理一 硬件设备与文件名的对应关系 硬盘的结构及硬盘分区 为什么进行硬盘分区 硬盘的逻辑结构 Linux系统中硬盘的分区 硬盘分区的分类 分区数量的约束 使用f ...
- SharePoint 读取 Site Columns 的数据并绑定到DropdownList
public void GetSiteColumns(DropDownList ddl, String siteColumn) { var fields = new SPSite(ProjectCon ...
- swift中的结构体和枚举
Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...
- mysql命令-use
use命令可以让我们来使用数据库. use命令格式: use <数据库名>; 例如,如果xhkdb数据库存在,尝试存取它: mysql> use xhkdb; 屏幕提示:Databa ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...