第1章 JavaScript概述

可以通过F12键或者Ctrl+Shift+J快捷键来唤醒控制台

初始化表达式(initializer expression)【第4章】

eg1:初始化表达式[数组]

var primes = [2,3,5,7];

eg2:初始化表达式{对象}

var book = {

topic:"JavaScript",

fat:true

};

通过“.”和“[]”来引用对象属性或数组元素的值

book.topic  //=> JavaScript

book["fat"]  //=> true

以分号结束的行,改变程序的运行状态【第5章】 -> 语句 statement

函数和对象合写在一起 -> 方法 method

第一部分JavaScript语言核心

第2章 词法结构

JavaScript区分大小写

HTML不区分大小写

XHTML区分大小写

2.4标识符和保留字

标识符

标识符就是一个名字,在JS中标识符用来对变量和函数进行命名,必须以字母、数字、下划线或美元符开始。

2.5可选的分号

在JS中,如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或右花括号之前的分号也可以省略)

注意:JS并不是在所有换行处填补分号,只有缺少分号无法解析才填补

【例】

var y=x+f

(a+b).toString()

=> var y=x+f(a+b).toString()

因此有些保守的程序员会这样写(即使上一行分号误删了也不必担心)

【例】

var x=0

;[x,x+1,x+2].forEach(console.log)

注:JavaScript forEach() 方法

https://www.runoob.com/jsref/jsref-foreach.html

另外的两个例子

【例】

1.涉及return,break,continue

return

true;

=>

return;true

2.涉及++和--

x

++

y

=>

x;++y

最好还是加上~加上分号便万事大吉~~

第3章 类型、值和变量

JS数据类型三种分类

1.原始类型(primitive type, /'prɪmətɪv/)和对象类型(object type)

原始类型包括数字、字符串和布尔值。JS中有两个特殊的原始值:null(空)和undefined(未定义)

除了上面五种,就是对象了。对象是属性(property)的集合,每个属性都由“名/值对”构成。特殊:全局对象(global object)

1)数组(array)是对象,表示带有编号的值得有序集合。普通JS对象是“命名值”的无序 集合。

2)函数是对象。如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)。每个构造函数定义了一类(class)对象。

3)日期(Date)类定义了代表日期的对象

4)正则(RegExp)类定义了表示正则表达式的对象

5)错误(ERROR)类定义了那些表示JS程序中运行时错误和语法错误的对象

垃圾回收(garbage collection)

2.可以拥有方法的类型和不能拥有方法的类型

在JS中,只有null和undefined是无法拥有方法的值(3.6会解释原因)

3.可变类型(mutable,/ˈmjuːtəbl/)和不可变类型(immutable,/ɪˈmjuːtəbl/)

可变类型的值是可以修改的,如对象、数组…

原始类型是不可变类型,如字符串(一些方法是返回新字符串),null,undefined…

JS变量是无类型的(untyped),使用var关键字来声明(declare)变量。

JS采用词法作用域(lexical scoping),不在任何函数内声明的变量称做全局变量,任何地方可见。

在函数内声明的变量具有函数作用域(function scope),并且只在函数内可见。

3.1数字

JS不区分整数值和浮点数值。JS中的左右数字均用浮点数值表示。

3.1.3 JS中的算术运算

Math对象的属性定义的函数可以进行一些复杂运算

【例】

Math.random()      //生成一个[0,1)的伪随机数

Math.pow(3,1/3)    //3的立方根

Math.log(10)    //10的自然对数

Math.log(100)/Math.LN10   //以10为底100的对数

Math.exp(3)    //e的三次幂

JS中的算术运算在溢出(overflow)、下溢(underflow)或被零整除时不会报错

溢出:Infinity,-Infinity

下溢:0,负零

非数字:【例】0/0 为not-a-number(NAN),JS中的非数字值和任何值都不相等,包括自身,所以应该通过x!=x来判断(只有x为NaN时才为true),函数isNaN()作用类似。

两个函数

isNaN()

isFinte():在参数不是NaN、Infinity或-Infinity的时候返回true

负零和正零值是相等的,这两个值几乎一样,除了做除数

3.2 文本

字符串(string)是一组由16位值组成的不可变的有序序列。

空字符串长度为0,JS中没有表示单个字符的“字符型”

如何查看浏览器编码模式?

浏览器调试页面输入document.charset或者document.characterset就会返回编码类型

【例】

document.charset

"UTF-8"

在ECMAScript 5中,字符串直接量可以拆分成数行,每行必须以反斜线(\)结束

【例】

"one

\long

\line"

字符串连接使用“+”

JS中的字符串固定不变,类似toUpperCase()的方法都返回新字符串,原字符串本身并没有发生改变。

可以把字符串当做只读数组,访问字符串的字符可以使用“[]”或方法charAt()

3.3 布尔值

任意JS的值都可以转为布尔值,下面这些值会被换成false(除此之外其它值转为true):

undefined

null

0

-0

NaN

""  //空字符串

3.4 null和undefined

null常用来描述“空值”,特殊的对象值,含义是“非对象”

【例】

>typeof(null)

"object"

undefined表示变量没有初始化,说明这个属性或元素不存在

【例】

>typeof(undefined)

"undefined"

以上两个值要使用严格相等运算符(“===”)区分

以上两个值不包含任何属性和方法,使用“.”和“[]”来存成员和方法会产生一个类型错误。

【例】

>null.length

VM77:1 Uncaught TypeError: Cannot read property 'length' of null

at <anonymous>:1:6

(anonymous) @ VM77:1

>undefined.length

VM98:1 Uncaught TypeError: Cannot read property 'length' of undefined

at <anonymous>:1:11

3.5 全局对象

当JavaScript解释器启动时(或者任何Web浏览器加载新页面的时候),她它将创建一个新的全局对象,并给它一组定义的初始属性。

在代码的最顶级——不在任何函数内的JS代码——可以使用JS关键字this来引用全局对象。

在客户端JS中,在其表示的浏览器窗口中的所有JS代码中,Window对象充当了全局对象。这个全局Window对象有一个属性window引用其自身,它可以代替this来引用全局对象。

3.6 包装对象

字符串既然不是对象,为什么它会有属性?

只要引用了字符串s的属性,JS就会将字符串值通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法(6.2.2节),并被用来处理属性的引用。一旦属性的引用结束,这个新建的对象就会销毁(其实在实现上并不一定创建或销毁这个临时对象,然而整个过程看起来是这样)。

数字和布尔值也有类似地方法,分别是Number()和Boolean()

以上三者的属性是只读的,不能给它们定义新属性。通过typeof运算符可以看到原始值和其包装对象的不同。

3.7 不可变的原始值和可变的对象引用

对象的比较并非值的比较。

【例】

var o==={x:1},o==={x:1};    //具有相同属性的两个对象

o===p   //=> false

var a=[],b=[];    //两个空数组

a===b   //=> false

对象也称为引用类型(reference type),与JS的基本类型区分(对象比较引用,基本类型比较值)。对象值都是引用(reference),当且仅当它们引用同一个基对象时,它们才相等。

【例】

var a=[];

var b=a;

b[0]=1;

a[0]    //=> 1

a===b  //=> true

如上,将对象(或数组)赋值给一个变量,仅仅是赋值的引用值;对象本身并没有复制一次。

【例】生成数组副本

var a = ['a','b','c'];

var b = [];

for (var i=0;i<a.length;i++){

b[i] = a[i];

}

3.8类型转换

Bollean([])    //=> true

String(false)    //等价于 false.toString()

Object函数转换null或undefined不会抛出异常,仅简单地返回一个新建的空对象。

【例】

>Object(null)

{}

>Object(undefined)

{}

通过运算符做隐式类型转换

【例】

x + "" //等价于String(x)

+x   //等价于Number(x),也可写成x-0

!!x //等价于Boolean(x)

以下都可以跳过前导空格

Number() 只能基于十进制转换,并且不能有非法尾随字符

parseInt() 只解析整数,第二个可选参数指明基数2~36,可以忽略后面内容

parseFloat() 整数+浮点数,可以忽略后面内容

3.9 变量声明

如果未在var声明语句中给变量指定初始值,在它存入一个值前,它的初始值是undefined

3.10 变量作用域

在全局作用域编写代码时可以不写var语句,但声明局部变量时则必须使用var语句。

3.10.1 函数作用域和声明提前

JS中没有块级作用域。JS使用函数作用域(function scope):变量在声明它们的函数体以及这个函数嵌套的任意函数体内都是有定义的。

var scope="gloal";

function f(){

console.log(scope); //=>输出"undefined"

var scope = "local";

console.log(scope); //=>输出"local"

}

3.10.2 作为属性的变量

当声明一个JS全局变量时,实际上是定义了全局对象的一个属性。当使用var声明一个变量时,创建的这个属性是不可配置的,无法通过delete运算符删除。

3.10.3 作用域链

每一段JS代码(全局代码或函数)都有一个与之关联的作用域链(scope chain)。这个作用域链是一个对象列表或链表,当JS需要查找x时(变量解析,variable resolution),会一级一级找。如果作用域链上没有任何一个对象含有属性x,会抛引用错误(Reference ERROR)异常。

相关重点:

with语句(5.7.1节)

闭包(8.6节)

[JS权威指南笔记] 第1章-第3章相关推荐

  1. JS权威指南笔记之数据类型

    1.类型分为原始类型和对象. 2.原始类型有:数字类型,字符类型,布尔,和null undefind. 3.JavaScript里的函数都是真值. 4.函数和通过New关键字创建对象.这个样函数称为构 ...

  2. 小弟的新书《Ext JS权威指南》终于出版了

    链接:http://product.china-pub.com/3661375&weibo#ml <ext js权威指南> 前 言 第1章 ext js 4开发入门 / 1 1.1 ...

  3. 《JS权威指南学习总结--1.1语言核心》

    1.1语言核心 --本节主要介绍<js权威指南>基础部分各章讲解内容和一些简单的示例 本小节内容: 一.第二章讲解js注释.分号和Unicode,第三章主要讲解js变量和赋值 简单示例: ...

  4. HTML5与CSS3权威指南笔记案例1

    第1章 <!DOCTYPE html> <meta charset = "UTF-8"> <title> Search </title&g ...

  5. 《JS权威指南学习总结--开始简介》

    本书共分成了四大部分: 1.JS语言核心 2.客户端JS 3.JS核心参考 4.客户端JS核心参考 其中 <JS权威指南学习总结--1.1语法核心> 是:第一部分JS语言核心 各章节重点 ...

  6. 开奖及送书|《Vue.js权威指南》

    2020 06 15 今天距2021年199天 这是一页河山第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 07:30准时推送. 微信公众号后 ...

  7. 前端大全(基础总结)(根据js权威指南扩展)

    javascript 权威指南第六版 // 提出问题 + 实例 + 练习 第一部分 基础知识 用:来分隔开.如果一条语句单独占一行,可以不用: 数据类型 (基本数据类型)原始数据类型:数字Number ...

  8. 《Cortex-M3 权威指南 笔记》

    因了命途中的你们,我才没有荒芜了青春. – 莫言 一.介绍 整个 MCU 只有Cortex-M3 处理器内核(中央处理单元(CPU))和调试器是ARM设计的,而存储器,外设,I/O以及其它功能块是芯片 ...

  9. Java性能优化权威指南--笔记

    出处:http://xiongpq.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 原文 ...

最新文章

  1. 与其羡慕他人精彩,还不如设法活出自我
  2. vue组件一直注册不了_Vue注册组件命名时不能用大写的原因浅析
  3. 皮一皮:现在想想真是幸运...
  4. silverlight: [HtmlPage_NotEnabled] 调试资料字符串不可用的解决
  5. linux怎么安装git服务器,linux下安装git服务端
  6. 利用C语言中的setjmp和longjmp,来实现异常捕获和协程
  7. Windows Terminal 已上架,快尝鲜
  8. 使用UITextField去自定义searchBar 【iOS】
  9. 论文评审最大流_毕业论文_最大流问题及其应用(7)(喜欢就下吧)
  10. 190521每日一句
  11. Excel2013函数公式大全(一)
  12. ipcam 网络摄像机介绍
  13. 书单|开工第一周,有哪些助你弯道超车的好书?
  14. 利用css实现太极图的制作(带旋转动画) (课程实践教学项目)
  15. Trove 3.0.0
  16. AS3多人游戏开发—同步人物移动
  17. 学Python太枯燥?不多BB这几个有趣的python 库让你爱上python
  18. LATCH的产生过程
  19. 安卓盒子刷rec linux启动,ADB命令刷入recovery刷机
  20. 【无限互联】学员作品:懒人听书

热门文章

  1. 运维-jenkins发版执行远程脚本连不上ssh
  2. 本科毕业生入户广州需要的材料清单
  3. 虚拟机增加磁盘空间(VMware虚拟机)
  4. C++_enhance-Record11—异常的层次结构(继承在异常中的应用)
  5. 用Python写一个双人对战足球小游戏,堪比国足的技术【附带源码】
  6. #23. 战棋游戏——Yucai OJ第17次测试
  7. telnet 正在连接127.0.0.1:8888...无法打开到主机的连接。 在端口 23: 连接失败
  8. 漫画女生怎么画(一步步教你画漫画)
  9. 原来菜鸟也可以做一个漂亮的网站,我的建站经验!
  10. 华为手机备份的通讯录是什么文件_手机怎么备份通讯录?华为手机备份方法大全...