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

原文地址:zclzone.com/zhangsheng

更佳阅读体验:zclzone.gitee.io/zhangsheng

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 标识符采用驼峰大小写格式:

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 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。

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

1.4 数据类型

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

  • 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)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况(这样就不会抛出错误了)

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容