《JS高级程序设计》[1-3]
来源:互联网 发布:java实现rsa算法 编辑:程序博客网 时间:2024/06/07 16:54
《JavaScript高级程序设计》Nicholas C.Zakas著
第1章 JavaScript简介
第2章 在HTML中使用JavaScript
标签:
<script>
属性:
type=”text/javascript”
src=”……”
async 只对外部脚步文件有效,立即下载脚步,异步加载。
defer 只对外部脚步文件有效,立即下载脚本,延迟执行。
外部文件的优势:
- 可维护性
- 可缓存
- 适应未来
注意:
- 不要在代码中的任何地方出现“</script>”字符串
- 带有src属性的<script>元素不应该在其<script>和</script>标签之间包含额外的JS代码,嵌入的代码会被忽视。
- 现代web应用程序一般都把全部JS引用放在<body>元素中页面内容的后面。
第3章 基本概念
3.1 语法
严格模式:
在严格模式下,ES3中的一些不确定行为将得到处理,而对于某些不安全的操作也会抛出错误。
启用严格模式,只需在顶端或函数内部的上方包含代码:
"use strict";
注意:
/* * 这是一个多行的注释 * 之所以第二行第三行开头都以一个不必要的*开头,是为了提高注释的可读性 */
3.3 变量
松散类型:
JS的变量都是松散类型,可用于保存任何类型的数据。
var操作符定义的变量将成为定义该变量的作用域中的局部变量。
省略var操作符,会创建一个全局变量,但不推荐这么做。
3.4 数据类型
基本数据类型:
Undefined、Null、Boolean、Number、String
复杂数据类型:
Object
typeof:
Undefined类型:
使用var声明变量但为对其加以初始化时,变量的值就是undefined。
即使未初始化的变量会自动被赋予undefined值,但显示地初始化变量仍然是明智的选择。这样做的话,当typeof操作符返回“undefined”时,我们就知道被检测的变量是未声明,还是未初始化。
Null类型:
唯一一个值null。
从逻辑的角度来看,null值表示一个空对象指针,从而有typeof检测null结果为object。
如果定义的变量准备在将来用于保存对象,那么最好将该对象初始化为null,而不是其他值。
实际上undefined值派生自null值,也就是说undefined==null的值为true。
Boolean:
Boolean()将一个值转换为其对应的Boolean值
注意,在运算过程中,这个转换是自动的。
var messageAsBoolean = Boolean(message);
Number类型:
使用IEEE754格式来表示整数和浮点数
由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。
数值的表示范围Number.MIN_VALUE~Number.MAX_VALUE
超过范围,数值将会被自动转换为Infinity
isFinite()用于检测参数是否有穷。
NaN即非数值用于表示一个本来要返回数值的操作数未返回数值的情况。
任何涉及NaN的操作都返回NaN。
NaN与任何值都不相等,包括它本身。
isNaN()检测参数是否为一个数值。(在接收到一个值的时候,会尝试将这个值转换为数值)
数值转换
注意:
- ++、–、+、-四则运算,JS都会自动将操作数按Number()转换。
-对于Number() ,如果操作数是对象,则先调用对象的valueOf()方法,将得到的值进行转化,若转化值是NaN,再调用对象的toString()方法,重复之前的步骤。 - 对于parseInt(),它会忽略字符串前面的空格,直到找到第一个非空字符。
- 对于parseInt(),在ES5中,已不具有直接解析八进制值的能力,因此在无可选参数的情况下,前导0会被认为无效。
- 对于parseInt(),可选参数表明被转换参数是用几进制表示的,所以转换结果都是十进制表示。
- 对于parseFloat(),始终忽视前导0,始终将十六进制值解析为0。
- 对于.toString(),可选参数表明转换结果用几进制表示。
String类型:
String类型是由零或多个16位Unicode字符组成的字符序列。
注意:
- 如果字符串中包含双字节字符,那么length属性可能不会精确地返回字符串中的字符数目。
- ES中的字符串是不可变的,要改变某个变量保存的字符串,首先要销毁原来的字符串,再用一个包含新值的字符串填充该变量。
Object对象:
Object类型是ES中所有实例的基础,其每一个实例都具有以下属性和方法:
3.5 操作符
一元操作符和位操作符
两者都会对非数值操作数自动进行Number()转换。
ES中所有的数值都以IEEE754 64位格式存储,但位操作符并不直接操作64位的值,而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位。
转换过程导致了一个副效应,即在对特殊的NaN和Infinity值应用位操作时,这两个值都会被当成0来处理。
布尔操作符
逻辑非得返回值是布尔值,操作时首先会将操作数转换为一个布尔值,然后对其求反。
逻辑与和逻辑或的返回值未必是布尔值,两者都是短路操作。
对于逻辑与:第一个操作数是false、NaN、null、undefined则返回这些,反之就返回第二个操作数。
对于逻辑或:两个操作数都是false、NaN、null、undefined则返回这些,如果第一个操作数为true返回第一个,反之,则返回第二个。
可以利用逻辑或来避免为变量赋null或undefined。
乘性操作符
- 3个乘性操作符:*/%,如果操作数为非数值,会自动进行类型转换(Number())
- Infinity * 0 = NaN
- 0/0=NaN
- 非零数/0=Infinity
- 有限数%0=NaN
加性操作符
对于加法:
操作数有字符串,则都转为字符串拼接(toString(),只有undefined和null才用String())。
操作数没字符串,没数值,全转为数值(Number()),常规计算。
对于减法:
操作数是字符串、布尔值、null或undefined,则先后在后台调用Number()进行转换。
操作数是对象,则调用对象的valueOf()方法获得该对象的数值,没有该方法则调用toString()方法
关系操作符
相等操作符
相等和不相等(==)先转换,再比较。
全等和不全等(===)仅比较。
语句
for-in循环输出的属性名的顺序是不可预测的。
switch语句中使用任何数据类型,每个case的值不一定是常量,还可以是变量,甚至是表达式。
switch语句在比较值的时候用的是全等操作符。
函数
- ES函数不介意传递多少个参数,也不在乎传进来的参数是什么数据类型。
- 因为ES函数中的参数在内部是用一个数组来表示的,并可以通过arguments对象来访问这个参数数组。
- 也就是说,命名参数只是提供便利,但不是必须的。
- arguments对象可以与命名参数一起使用。
- arguments访问的参数值与对应的命名参数的值保持同步,若一者做出修改,另一者也会发生改变。
- 但是这个参数数组命名参数的内存空间是独立的。
- 如果只传入了一个参数,那么arguments[1]设置的值不会反映到命名参数中(即使有第二个命名参数)。
- 没有传递值的命名参数将自动被赋予undefined值。
- ES中的所有参数传递的都是值,不可能通过引用传递参数。
- 这是因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数的命名参数的个数决定的。
- 由于ES的函数不存在签名(接受参数的类型和数量),所以在ES中重载是不存在。
- 在ES中,如果定义了两个名字相同的函数,那么该名字属于后定义的函数。
- 如果要模仿方法的重载,那么通过检测传入函数中的参数的数量和类型做出不同的反应。
- 《JS高级程序设计》【1~3】
- 《JS高级程序设计》[1-3]
- JS高级程序设计3-基本概念
- js高级程序设计笔记1
- js高级程序设计笔记3--继承
- JS高级程序设计 读书笔记(1)
- js高级程序设计学习笔记1
- js高级程序设计
- Ext JS高级程序设计
- js 高级程序设计笔记
- JS高级程序设计_01
- JS高级程序设计_02
- JS高级程序设计_03
- 再读《js高级程序设计》
- JS高级程序设计-笔记
- 《JS高级程序设计》读书笔记
- js高级程序设计读书笔记
- js高级程序设计
- Hdu 1885 Key Task(状压+BFS)
- 2016-11-15面试总结
- 两个页面之间通过js进行传值
- bzoj 1419: Red is good (概率与期望)
- sso+shiro
- 《JS高级程序设计》[1-3]
- java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ………………
- 从零单排Mac Pro - 快捷键篇
- sql更改表的一个字段
- jdk 1.8 与 spring+springmvc 3.2 .jar 启动tomcat报错
- Linux发送函数dev_queue_xmit
- leveldb之cache
- Android音频播放--SoundPool
- 20161115