红宝书阅读笔记(1)

前言

虽然一直都在用js,没有正经看过几本js的书。久仰红宝书大名(《JavaScript高级程序设计》),这段时间有空,每天坚持看一点。在此记录下一些阅读笔记。
为了方便阅读与检索,所有笔记也是按红宝书的章节顺序来。

第一章 JavaScript简介

这一章没有什么特别要记录的,主要是介绍了一下JavaScript,有兴趣可以看一下。

第二章 在HTML中使用JavaScript

这章也没有什么要记录的,在html中使用JavaScript已经是家常便饭的事了。还有一些如Cdata这样的历史遗留问题,由于浏览器越来越规范,这些问题终究会淡去,稍作了解即可。

第三章 基本概念

1. isNaN() 检测对象

在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值调用toString()方法,在测试返回值。

以上是红宝书中的原话,有个地方需要纠正一下,“则基于这个返回值调用toString()方法”,这里应该是基于原对象继续调用toString()方法。
isNaN()检测对象并不常用,这里做个简单记录,稍作了解即可。但是对象的这种转换形式很常见,先调用valueOf,再调用toString。在之后的 "==" 中也会提到。

2. Number、parseInt 和 parseFloat (数值转换)
2.1 Number() 函数转换规则
  • true和false分别转换为1和0
  • 如果是数值,原样返回
  • 如果是null,返回0
  • 如果是undefined,返回NaN
  • 如果是字符串,遵循下列规则:
    • 如果字符串只包含数字(包括整数和小数,开头可以有加号和减号,数值前后可以包含空格),则转化为十进制数值(前导0将被忽略,小数后面的0会被忽略):
    Number('+1') // 1
    Number('1') // 1
    Number('     1    ') // 1 数值前后可以包含空隔
    Number('1 1') // NaN 数字间包含空格会被转换为NaN
    Number('-1') // -1
    Number('010') // 10
    Number('00.10') // 0.1
    Number('.1') // 0.1
    Number('0.1.1') // NaN 多个小数点将被转换NaN
    
    • 如果字符串,是有效的十六进制,例如"0xf",会被转换为相应的十进制整数
    • 如果字符串是空,则转换为0
    • 如果字符串包含除上述格式之外的字符,贼将转换为NaN。
  • 如果是对象,先调用对象的valueOf()方法,然后依照漆面的规则转换返回的值。如果转换结果为NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串。
2.2 parseInt() 函数转换规则
  • 空字符串,true,false,null,undefined 皆返回NaN
  • 如果是整数,原样返回
  • 如果是小数,只截取整数部分
parseInt(1.9) // 1
  • parseInt解析字符串与Number相似,但是parseInt会从左到右解析所有数字字符,直到遇到非数字字符。
// parseInt和Number转换字符比较

// 都为整数时相同
parseInt('1') // 1
Number('1') // 1

// 小数
parseInt('1.1') // 1
Number('1.1') // 1.1

// 数字后带字符
parseInt('1a1') // 1
Number('1a1') // NaN

// 数字前带字符
parseInt('a1') // NaN
Number('a1') // NaN

// 忽略前后空格
parseInt('   1   ') // 1
Number('   1   ') // 1

// 数字中间带空格
parseInt('1 1') // 1
Number('1 1') // NaN
  • parseInt对象的转换,与Number相同

parseInt包含第二个参数,该参数表示待转换数值的进制

parseInt('10', 2) // 2
parseInt('10', 8) // 8
parseInt('10', 10) // 10
parseInt('10', 16) // 16
2.3 parseFloat() 函数转换规则

与parseInt()函数类似,parseFloat()也是第一个字符(位置0)开始解析每个字符。而且也是一直即系到字符串末尾,或者解析到遇见一个无效的浮点数字符为止。也就是说字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。举例来说,"22.34.5"将会被转换为22.34。
parseFloat()可以识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但是十六进制格式的字符串始终会被转换成0.由于parseFloat()只解析十进制值,英雌它没有用第二个参数指定基数的用法。最后还要注意一点:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是0),parseFloat()会返回整数。

parseFloat('1234blue')  // 1234
parseFloat('0xA')  // 0
parseFloat('22.5')  // 22.5
parseFloat('22.34.5')  // 22.34
parseFloat('0908.5')  // 0908.5
parseFloat('3.125e7') // 31250000
2.4 总结

这3个方法平时比较常用,在看红宝书之前也没有考虑过这么多。虽然看上去复杂,但是平时用的多的话也就习惯于自然,记不起就测试一下。这些规则也就稍作了解,留个印象即可。

3. toString()和String()

这两个方法主要区别是,toString不能用于null和undefined,否则会报错。而String()可以将null转换为"null",将undefined转换为"undefined"。

4. 位运算相关操作

位运算一直都是一知半解,当初上课没有好好听。主要还是平时用不太到,到至今还是一知半解的状态。这次好好看了一下红宝书的位运算,算是又帮助复习了一遍。

5. 关系操作符

变量比较时的自动转换,一直令人比较诟病的地方吧。对于这方面可以稍作了解,但是尽量不要尝试去用这些特性。比如用数字类型和对象类型做比较,你明确知道对象类型会进行转换,你也尽量不要用。手动将不同的类型转化为同类型后再做比较。还有就是尽量用 === 和 !== ,不要用 == 和 !=

6. switch的case

算是一个一直忽略的小知识吧,switch的case是全等比较。

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

推荐阅读更多精彩内容

  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,789评论 0 1
  • 变量 声明变量 命名变量区分大小写的语言第一个字符是字母或下划线_,数字不能作为第一个字符字符必须是字母,数字或者...
    flyingtoparis阅读 802评论 0 0
  • 标签: 我的笔记 ---学习资料:http://javascript.ruanyifeng.com/ 1. 导论 ...
    暗夜的怒吼阅读 803评论 0 1
  • Sarah 何以解忧,唯有沙拉 个人公众号:射手座的疯子Sarah 何必去管别人眼中的你,那不是你讨厌自己不优秀的...
    射手座的疯子Sarah阅读 161评论 0 0
  • mark UTF - 8 它是一种变长的字符集表示:单字节来表示字母,双字节来表示一些希腊字母,三字节来表示汉字,...
    离子来了阅读 309评论 1 1