读书笔记[1]

javascript 语言核心

词法结构

  • javascript 是区分大小写的,online, Online, OnLine, ONLINE 是四个不同的变量。
  • HTML 是不区分大小写的。
  • 严格来讲 XHTML 是区分大小写的,浏览器会 “宽容” 的正确解析。
  • Unicode转义写法可以用在字符串直接量、正则表达式直接量、标识符(关键字除外)。
  • 直接量:就是程序中直接使用的数据值。
  • 标识符:就是一个名字,用来对变量和函数进行命名。(必须以字母,下划线,美元符开始,数字是不允许的)。
1
"café" === “caf/u00e9” // => true

数据类型

  • 原始类型:数字、字符串、布尔值、null、undefined
  • 对象类型(属性property的集合):数组(特殊的对象array)、函数(特殊的对象function)
  • 构造函数:函数用来初始化一个新建的对象,我们称之为构造函数,每个构造函数定义了一类(class)对象,这一类对象可以称作是对象类型的字类型。
  • javascript核心类:日期(Date), 正则 (RegExp), 错误(Error)
  • 数据回收,当不再有引用指向一个对象,解释器就会认为这个对象没用了,然后会按照回收机制,对其进行回收(不一定是立即执行)。
  • javascript中字符串是不可变的,没有提供任何修改已知字符串的文本内容的方法
  • javascript可以自由的进行数据转换。
  • javascript变量是无类型的,可以被赋予任何值。
  • 不在任何函数内声明的变量,称为全局变量。
  • 函数内声明的变量具有函数作用域,并且只在函数内可见。
  • javascript采用64位浮点格式表示数字
1
2
3
最大值 + 1.7976931348623157 x 10e308
最小值 - 5x10e-324
能表示的整数范围 2e53 ~ -2e52
  • 无穷大 = infinity
  • 负无穷大 = -infinity
  • isNaN(),如果参数是 NaN 或者一个非数字值,则返回true
  • isFinite(),如果参数不是 NaN,infinity,-infinity,则返回true
1
2
3
var x = .3 - .2; // => 0.09999999999999998
var y = .2 - .1;
x == y; // => false
  • 当使用单引号来界定字符串时,要注意英文,撇号和单引号是一个字符。(个人推荐用双引号来界定字符串)
  • 转义字符
  • javascript中字符串是固定不变的,replace(), toUpperCase() 都返回一个新的字符串,原值并未发生改变。
  • undefined, null, 0, -0, NaN, “” 会被转换为 false,所有其他值包含对象和数组都会转换为true
  • null 和 undefined 用 === 来区分,typeof 可以看出区别。
1
2
typeof null = Object;
typeof undefined = "undefined"
  • 全局属性,undefined,infinity,NaN
  • 全局函数,isNaN(),parseInt(),parseFloat(),eval()
  • 构造函数,Date(),RegExp(),String(),Object(),Array()
  • 全局对象,Math,JSON
  • 字符串,数字,布尔值的属性都是只读的,不能定义新属性
  • == 会将原始值和其包装对象视为相等,=== 不会,typeof 可以看出原因
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var s = "test", n = 1, b = true;
var S = new String(s);
var N = new Number(n);
var B = new Boolean(b);

s == S // => true
s === S // => fasle
typeof s // => "string"
typeof S // => "object"

n == N // => true
n === N // => false
typeof n // => "number"
typeof N // => "object"

b == B // => true
b === B // => false
typeof b // => "boolean"
typeof B // => "object"
  • 原始值是不可更难改的,任何方法都无法更改或突变一个原始值。
  • 比较两个单独的字符串,当且仅当它们的长度相等,且每个索引的字符都相等时,javascript才认为它们相等
  • 对象是引用类型的
  • toFixed() 从不会采用指数计数法
  • toExponential() 使用指数计数法
  • 对象转字符串先调用toString(),如果有方法且返回原始值,则返回结果,如果没有toString()方法,或者返回不是原始值,则继续调用valueOf()方法
  • 对象转数字与上条相反,先valueOF()后toString()
  • 日期类是javascript中唯一的预先定义类型。
  • 动态语言,不会给任何变量指定数据类型,只会在第一次赋值变量时,在内部记录下数据类型,代表:Python,Ruby,Javascript
  • C/C++静态语言代表,C#,Java
  • 变量作用域指代码中定义这个变量的区域
  • 参数属于局部变量
  • 局部变量优先级高于同名全局变量
  • javascript 是函数作用域,变量在声明它的“函数体以及这个函数体嵌套的任意函数体内”都是有定义的,这个特性称之为“变量提升”
  • 声明一个全局变量时,是定义了全局对象上的一个属性
  • 使用var声明一个变量时,这个属性不可配置,不能被 delete
  • 当定义一个函数时,它实际保存了一个作用域链,当调用这个函数时,他创建一个新的对象来存储它的局部变量,并将这个对象添加至保存作用域链的对象上。

日期和日历

待补充

正则表达式

待补充

面向对象

待补充

0%