JavaScript高级程序设计-读书笔记(一)

原文地址:zclzone.comjavascript

1 基本概念

1.1 语法

ECMAScript 的语法大量借鉴了C 及其余类C 语言(如Java 和Perl)的语法。
熟悉这些语言的开发人员在接受ECMAScript 更加宽松的语法时,必定会有一种轻松自在的感受。
即便没有其余编程语言基础,JavaScript仍然易上手。
复制代码

1.1.1 区分大小写

ECMAScript 中的一切(变量、函数名和操做符)都区分大小写。
变量名test 和变量名Test 分别表示两个不一样的变量。
复制代码

1.1.2 标识符

标识符,就是指变量、函数、属性的名字,或者函数的参数,规则:
1. 第一个字符必须是一个字母、下划线(_)或一个美圆符号($)
2. 其余字符能够是字母、下划线、美圆符号或数字
3. 不容许是关键字、保留字、true、false和null
复制代码

ECMAScript 标识符采用驼峰大小写格式:java

var myBlog
var doSomethingImportant
复制代码

1.1.3 注释

//单行注释

/* * 这是一个多行 * (块级)注释 */
复制代码
虽然上面多行注释中的第二和第三行都以一个星号开头,但这不是必需的。之因此添加那两个星号,纯粹是为了提升注释的可读性
复制代码

1.1.4 语句

ECMAScript 中的语句以一个分号结尾;若是省略分号,则由解析器肯定语句的结尾,以下例所示:编程

var sum = a + b // 即便没有分号也是有效的语句——不推荐
var diff = a - b // 有效的语句——推荐
复制代码
加上分号也会在某些状况下增进代码的性能,由于这样解析器就没必要再花时间推测应该在哪里插入分号了
复制代码

尽可能始终在控制语句中使用代码块——即便代码块中只有一条语句浏览器

// 有效但容易出错,不要使用
if (test) 
  alert(test)

// 推荐使用
if (test) {
  alert(test)
}
复制代码
在控制语句中使用代码块可让编码意图更加清晰,并且也能下降修改代码时出错的概率
复制代码

1.2 关键字和保留字

ECMAScript 的所有关键字编程语言

break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try函数

保留字:性能

abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public测试

1.3 变量

ECMAScript 的变量是松散类型的,所谓松散类型就是能够用来保存任何类型的数据。ui

可使用一条语句定义多个变量,只要像下面这样把每一个变量(初始化或不初始化都可)用逗号分隔开便可:
复制代码
var message = 'hi',
    found = false,
    age = 29
复制代码

1.4 数据类型

5 种简单数据类型(也称为基本数据类型):this

  • Undefined
  • Null
  • Boolean
  • Number
  • String

1 种复杂数据类型: Object

1.4.1 typeof 操做符

typeof——用来检测给定变量的数据类型的操做符

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

例:

var message = 'some string'
console.log(typeof (message)) // "string"
console.log(typeof message) // "string"
console.log(typeof 95) // "number"
复制代码
注意:typeof 是一个操做符而不是函数,所以例子中的圆括号尽管可使用,但不是必需的
复制代码

1.4.2 Undefined 类型

Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时, 这个变量的值就是 undefined,例如:

var message
console.log(message == undefined) //true
复制代码

1.4.3 Null 类型

Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用 typeof 操做符检测 null 值时会返回"object"的缘由,以下面的例子所示:

var car = null
console.log(typeof car) // "object"
复制代码

实际上,undefined 值是派生自 null 值的,所以 ECMA-262 规定对它们的相等性测试要返回 true:

console.log(null == undefined) //true
复制代码

1.4.4 Boolean 类型

该类型只有两个字面值:true 和 false。 虽然 Boolean 类型的字面值只有两个,但 ECMAScript 中全部类型的值都有与这两个 Boolean 值 等价的值。要将一个值转换为其对应的 Boolean 值,能够调用转型函数 Boolean(),以下例所示:

var message = 'Hello world!'
var messageAsBoolean = Boolean(message)
console.log(messageAsBoolean) //true
复制代码
数据类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 任何非空字符串 ''(空字符串)
Number 任何非零数字值(包括无穷大) 0 和 NaN
Undefined 不适合这种规则 undefined

1.4.5 Number 类型

Number 类型使用 IEEE754 格式来表示 整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。

1. 浮点数值

所谓浮点数值,就是该数值中必须包含一个小数点,而且小数点后面必须至少有一位数字 因为保存浮点数值须要的内存空间是保存整数值的两倍,所以 ECMAScript 会不失时机地将浮点数值 转换为整数值。显然,若是小数点后面没有跟任何数字,那么这个数值就能够做为整数值来保存。一样 地,若是浮点数值自己表示的就是一个整数(如 1.0),那么该值也会被转换为整数,以下面的例子所示:

var floatNum1 = 1 // 小数点后面没有数字——解析为 1
var floatNum2 = 10.0 // 整数——解析为 10
复制代码

浮点数值的高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1 加 0.2 的结果不是 0.3,而是 0.30000000000000004。这个小小的舍入偏差会致使没法测试特定的浮点数值。 例如:

if (a + b == 0.3) {
console.log('You got 0.3.')   // 不要作这样的测试!
}
复制代码
在这个例子中,咱们测试的是两个数的和是否是等于 0.3。若是这两个数
是 0.05和 0.25,或者是 0.15 和 0.15都不会有问题。而如前所述,如
果这两个数是 0.1和 0.2,那么测试将没法经过。所以,永远不 要测试某
个特定的浮点数值。
复制代码

2. 数值范围

因为内存的限制,ECMAScript 并不能保存世界上全部的数值。ECMAScript 可以表示的小数值保 存在 Number.MIN_VALUE 中——在大多数浏览器中,这个值是 5e-324;可以表示的大数值保存在 Number.MAX_VALUE 中——在大多数浏览器中,这个值是 1.7976931348623157e+308。若是某次计算的 结果获得了一个超出 JavaScript 数值范围的值,那么这个数值将被自动转换成特殊的 Infinity 值。具 体来讲,若是这个数值是负数,则会被转换成-Infinity(负无穷),若是这个数值是正数,则会被转 换成 Infinity(正无穷)。

若是某次计算返回了正或负的 Infinity 值,那么该值将没法继续参与下一次的计算,
由于 Infinity 不是可以参与计算的数值
复制代码

3. NaN

NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个原本要返回数值的操做数 未返回数值的状况(这样就不会抛出错误了)

怕什么真理无穷,进一寸有进一寸的惊喜~

相关文章
相关标签/搜索