javascript高级编程(第三版) 02_基本概念

语法

区分大小写

一切(变量、函数名和操作符)都区分大小写

标识符

第一个字符必须是一个字母、下划线(_)或一个美元符号($)
其他字符可以是字母、下划线、美元符号或数字
*惯例 驼峰命名法

注释

//
/* */

严格模式

严格模式是为 JavaScript 定义了一种不同的解析与执行模型
要在整个脚本中启用严格模式,可以在顶部添加如下代码:“use strict”
支持严格模式的浏览器包括 IE10+、Firefox 4+、Safari 5.1+、Opera 12+和 Chrome。

语句

ECMAScript 中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾

关键字和保留字

变量

定义变量
var messsage =‘hi’
没有经过初始化的变量 会保存一个特殊值 undefined

message = 100
不建议做这样的 更改类型的修改 但是有效

函数中的变量 在函数退出后就会销毁
在函数中 省略 var 操作符 可以定义全局变量

同样可以使用一条语句定义多个变量 变量之间用, 分隔

数据类型

typeof 操作符

对一个值使用 typeof 操作符可能返回下列某个字符串:

  • “undefined”——如果这个值未定义
  • “boolean”——如果这个值是布尔值
  • “string”——如果这个值是字符串
  • “number”——如果这个值是数值
  • “object”——如果这个值是对象或 null
  • “function”——如果这个值是函数

undefined 类型

该类型只有一个值

未初始化的变量 – undefined

未声明的变量 typeof 返回 undefined

null 类型

  • 该类型只有一个值
    null 表示一个空对象指针

undefined 的值派生自 null

undefined == null // true
undefined === null // false

Boolean类型

两个字面量值 false true

  • 区分大小写
    但 ECMAScript 中所有类型的值都有与这两个 Boolean 值
    等价的值。要将一个值转换为其对应的 Boolean 值,可以调用转型函数 Boolean()

Number类型

可以通过 10进制 8进制 16进制的字面值来表示

八进制字面量在严格模式下是无效的
在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。

浮点数值

保存浮点数值需要的内存空间是保存整数值的两倍
会不失时机地将浮点数值转换为整数值
对于那些极大或极小的数值,可以用 e 表示法(即科学计数法)表示的浮点数值表示

var floatNum = 3.125e7; = 3.125乘以10的7次方

浮点数计算产生 舍入误差问题 是IEEE754通病

数值范围

5e-324 ~~~ 1.7976931348623157e+308

NaN 一个特殊的数值

isNaN() // 输入可以转化为数值的 返回 false 其他返回 true

数值转换
Number()

如果是 Boolean 值,true 和 false 将分别被转换为 1 和 0。
如果是数字值,只是简单的传入和返回。
如果是 null 值,返回 0。
如果是 undefined,返回 NaN。
如果是字符串,遵循下列规则:
如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"
会变成 1,“123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);
如果字符串中包含有效的浮点格式,如"1.1”,则将其转换为对应的浮点数值(同样,也会忽
略前导零);
如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整
数值;
如果字符串是空的(不包含任何字符),则将其转换为 0;
如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。
如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换
的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符
串值。

parseInt(’’,n)

‘-1’ NaN
空字符串 – NaN
070 八进制
0x 十六进制
‘123sdad’ --123
n为可选参数 表示转化的为几进制
es5 开始不再自动对 8进制转化
指定基数

String类型

“” ‘’ 包含的字符串

字符字面量

\n 换行
\t 制表
\b 空格
\r 回车
\f 进制
\ 斜扛
’ 单引号 ’
"
\xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A"
\unnnn 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符Σ

转换为字符串

数值、布尔值、对象和字符串值都有 toString()方法
null 和 undefined 值没有这个方法

在调用数值的 toString()方法时,可以传递一个参数:输出数值的基数

转型函数 String()能够将任何类型的值转换为字符串。
如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果
null – null
undefined – undefined

Object类型

var o = new Object() ()可以省略
通过new 创建 Object类型所具有的任何属性和方法也同样存在于更具体的对象中

constructor
hasOwnProperty(propertyName): 用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在
isPrototypeOf(object):
propertyIsEnumerable(propertyName) 用于检查给定的属性是否能够使用 for-in 语句来枚举
toLocaleString()
toString()
valueOf()

操作符

一元操作符

++ – 和c相同

不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象

规则:
在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作。字符串变量变成数值变量。
在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN(第 4 章将详细讨论)。字符串变量变成数值变量。
在应用于布尔值 false 时,先将其转换为 0 再执行加减 1 的操作。布尔值变量变成数值变量。
在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。
在应用于浮点数值时,执行加减 1 的操作。
在应用于对象时,先调用对象的 valueOf()方法(第 5 章将详细讨论)以取得一个可供操作的值。然后对该值应用前述规则。如果结果是 NaN,则在调用 toString()方法后再应用前述规则。对象变量变成数值变量
一元加和减操作符

在对非数值应用一元加操作符时该操作符会像 Number()转型函数一样对这个值执行转换。
布尔值 false 和 true 将被转换为 0 和 1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的 valueOf()和(或)toString()方法,再转换得到的值

位操作符

位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。
ECMAScript 中的所有数值都以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值。而是先将 64 位的值转换成 32 位的整数,然后执行操作,最后再将结果转换回 64 位
对于有符号的整数,32 位中的前 31 位用于表示整数的值。第 32 位用于表示数值的符号:0 表示正数,1 表示负数

负数同样以二进制码存储,但使用的格式是二进制补码
补码步骤
(1) 求这个数值绝对值的二进制码(例如,要求18 的二进制补码,先求 18 的二进制码);
(2) 求二进制反码,即将 0 替换为 1,将 1 替换为 0;
(3) 得到的二进制反码加 1。

在以二进制字符串形式输出一个负数时,我们看到的只是这个负数绝对值的二进制码前面加上了一个负号

*默认情况下,ECMAScript 中的所有整数都是有符号整数
按位非(NOT) ~

返回 反码

按位与(AND)&

两个数值的位对齐 进行 AND 操作

按位或(OR) |

两个数值的位对齐 进行 | 操作

按位异或(XOR) ^

两个数值的位对齐 进行 ^ 操作

左移 <<

将数值的二进制编码 向左移动 即在右边加 0

  • 左移不会影响操作数的符号位
有符号的右移 >>

将数值的二进制编码 向右移动 移动的空位用符号位来填充

无符号右移 >>>

无符号右移操作符会把负数的二进制码当成正数的二进制码。

布尔操作符

逻辑非 !
如果操作数是一个对象,返回 false
如果操作数是一个空字符串,返回 true
如果操作数是一个非空字符串,返回 false
如果操作数是数值 0,返回 true
如果操作数是任意非 0 数值(包括 Infinity),返回 false
如果操作数是 null,返回 true
如果操作数是 NaN,返回 true
如果操作数是 undefined,返回 true。
  • 同时使用两个 !! 转化为boolean
逻辑与 &&
如果第一个操作数是对象,则返回第二个操作数;
如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象;
如果两个操作数都是对象,则返回第二个操作数;
如果有一个操作数是 null,则返回 null
如果有一个操作数是 NaN,则返回 NaN
如果有一个操作数是 undefined,则返回 undefined。

逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值

逻辑或 ||

如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。

乘性操作符

乘法 *

数值 — 正常运算
有一个是 NaN || 0 — NaN
如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值

除法 /

同上

求模 % 取余数

类似

加性操作符

加法 +

特殊的:
如果有一个操作数是 NaN,则结果是 NaN
是 Infinity 加-Infinity,则结果是 NaN;
+0 加 -0,则结果是+0。
如果有一个操作数是字符串
如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来
如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来
如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值

减法 -

是-Infinity 减-Infinity,则结果是 NaN;
+0 减 -0,则结果是-0

关系操作符

小于(<)、大于(>)、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比

如果两个操作数都是数值,则执行数值比较。
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面的规则执行比较。
如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较

比较的是两个字符串中对应位置的每个字符的字符编码值

相等操作符

相等和不相等 == !=

null 和 undefined 是相等的

全等和不全等 === !==

不会做类型转换 类型和数值必须全部相等

条件操作符 ? :

条件语句 ? a : b

赋值操作符 =

把右侧的值赋给左侧的变量

逗号操作符

语句

if语句
do while
while
for
for-in

for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性
for (var propName in window) {
document.write(propName);
}

lable

label 语句可以在代码中添加标签,以便将来使用

break continue
with

with 语句的作用是将代码的作用域设置到一个特定的对象中
严格模式下不允许使用 with 语句

switch

函数

function functionName(arg0, arg1,…,argN) {
statements
}
return 语句之后停止并立即退出

理解参数

ECMAScript 中的参数在内部是用一个数组来表示的而不关心数组中包含哪些参数
在函数体内可以通过 arguments 对象来访问这个参数数组,
,arguments 对象只是与数组类似(它并不是 Array 的实例)

没有重载
两个名字相同的函数,则该名字只属于后定义的函数

小结

JavaScript 的核心语言特性在 ECMA-262 中是以名为 ECMAScript 的伪语言的形式来定义的。
ECMAScript 中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但
没有对取得输入和产生输出的机制作出规定。理解 ECMAScript 及其纷繁复杂的各种细节,是理解其在
Web 浏览器中的实现——JavaScript 的关键。目前大多数实现所遵循的都是 ECMA-262 第 3 版,但很多
也已经着手开始实现第 5 版了。以下简要总结了 ECMAScript 中基本的要素。
 ECMAScript 中的基本数据类型包括 Undefined、Null、Boolean、Number 和 String。  与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据类型,Number 类型可
用于表示所有数值。
 ECMAScript 中也有一种复杂的数据类型,即 Object 类型,该类型是这门语言中所有对象的基
础类型。
 严格模式为这门语言中容易出错的地方施加了限制。
 ECMAScript 提供了很多与 C 及其他类 C 语言中相同的基本操作符,包括算术操作符、布尔操作
符、关系操作符、相等操作符及赋值操作符等。
 ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、for 语句和 switch 语句等。
ECMAScript 中的函数与其他语言中的函数有诸多不同之处。
 无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。
 实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。
 ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式
传递的。
 可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数。
 由于不存在函数签名的特性,ECMAScript 函数不能重载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值