javascript语言精粹md

33 阅读7分钟
第一章 精华
1.为什么要使用javascript?

JavaScript 是一门重要的语言,因为它是 Web 浏览器的语言。它与浏览器的结合使它成为世界上最流行的编程语言之一。同时,它也是世界上最被轻视的编程语言之一。浏览器的 AP]和文档对象模型(DOM)相当糟糕,连累 JavaScript 遭到不公平的指责。在任何语言中处理 DOM 都是一件痛苦的事情,它的规范制定得很拙劣并且实现互不一致。本书很少涉及 DOM,我认为写一本关于 DOM 的精华的书就像执行一项不可能完成的任务。 JavaScript 是最被轻视的语言,因为它不是所谓的主流语言(SOME OTHER LANGUAGE)译注2。如果你擅长某些主流语言,但却在一个只支持 JavaScript的环境中编程,那么被迫使用 JavaScript 的确是相当令人厌烦的。在这种情形下,大多数人觉得没必要先去学好 JavaScript,但结果他们会惊讶地发现,JavaScript 跟他们宁愿使用的主流语言有很大不同,而且这些不同至为关键。 JavaScript令人惊异的事情是,在对这门语言没有太多了解,甚至对编程都没有太多了解的情况下,你也能用它来完成工作。它是一门拥有极强表达能力的语言。当你知道要做什么时,它还能表现得更好。编程是很困难的事情。绝不应该在懵懵懂懂的状态下开始你的工作。 ------摘录书中原文

第二章 语法
1.空白

空白可能表现为被格式化的字符或注释的形式,空白通常没有意义,但是有时候必须用来分隔字符序列,否则 会合并成一个符号。

var that = this;

var 和 that之间的空格是不能移除的,但是其他的空格都可以移除。

2.标识符
  • 标识符就是变量、函数、属性或函数参数的名称。它由一个字母、下划线或美元符号开头,其后可选择地加上一个或多个字母、下划线、美元符号或数字,比如:
abc 
_2a_$ 
$6bc$$__3
  • JavaScript 规定,保留字不能用作标识符或对象的属性名,因为它们有特殊用途。部分保留字如下:
abstract boolean break byte case catch char class const continue
3.数字
  • JavaScript 的数字类型与 Java 的 double 数字类型一样,内部被表示为 64 位的浮点数。
  • NAN 是一个数字,但是是一个不能产生正确结果的数字。NAN不等于任何值,包括它自己。可以用函数isNAN检测NAN
4.字符串
  • 字符串字面量可以被包在一对单引号或双引号中,它可能包含0个或多个字符。\ (反斜线 符号)是转义字符。JavaScript在被创建的时候,Unicode是一个16位的字符集,所以 JavaScript中的所有字符都是16位的。
  • JavaScript没有字符类型。要表示一个字符,只需创建仅包含一个字符的字符审即可。
  • 字符串有一个length属性。例如,”seven“.length是5。
  • 字符串是不可变的。一旦字符串被创建,就永远无法改变它。但你可以很容易地通过+运 算符连接其他字符串来创建一个新字符串。两个包含着完全相同的字符且字符顺序也相同的字符串被认为是相同的字符串。所以:
‘c’+'a'+'t' === 'cat'true

字符串有一些方法 cat'.toUpperCase ( ) === ‘CAT'

5.语句
  • switch, while、for和do都是语句,JavaScript可以通过条件语句(if和switch).循环 语句(while、for和do)、强制跳转语句(break, return和throw)和函数调用来改变 执行序列。
  • if语句根据表达式的值改变程序流程。表达式的值为真时执行跟在其后的代码块,否则, 执行可选的else分支。
if (condition) statement1 else statement2

condition也就是判断条件,可以是任何表达式。当表达式的值为真时执行跟在其后的代码块,否则,执行可选的 else 分支。当表达式为以下任意一个时,判断结果为假(false):

  • false
  • null
  • undefined
  • 空字符串 ''
  • 数字 0
  • 数字 NaN
  • switch语句执行一个多路分支。它把其表达式的值和所有指定的case条件进行匹配。其 表达式可能产生一个数字或字符串。当找到一个精确的匹配时,执行匹配的case从句中的 语句。如果没有找到任何匹配,则执行可选的default语句。
switch (expression) {
  case value1:
    statement1
    break;
  case value2:
    statement2
    break;
  case value3:
    statement3
    break;
    ...
  default:
    statement
  }

switch 语句会将 expression,即表达式的值,与所有指定的 case 条件进行匹配。

  • 如果没有找到任何匹配,则执行可选的 default 语句。
  • 如果找到一个精确的匹配,会执行匹配的 case 从句中的语句,并继续往下匹配。
  • 如果要防止继续匹配下一个 case,可以在 case 从句中的语句后加上一个强制跳转语句break来退出 switch 语句。
  • while语句执行一个简单的循环。如果表达式值为假,就终止循环。而当表达式值为真时, 代码块被执行。
  • for语句是一个结构更复杂的循环语句.还有一个for in 会枚举一个对象的所有属性名(或键名) 你需要检测object.hasOwnProperty () 来确定这个属性名是该对象的成员, 还是来自于原型链。
  • try 语句需要搭配 catch 从句使用,其语法如下:

try { } catch (error) { }

try 语句执行一个代码块,并捕获该代码块抛出的任何异常。catch 从句必须定义一个错误对象 error,无论是否使用它。

在 try 代码块中,可以使用 throw 语句抛出一个异常,等 throw 语句执行后,代码会立即退出执行,并跳到 catch 块中。其中,throw 语句的表达式通常是一个对象字面量,它包含一个 name 属性和一个 message 属性。

  • return 语句用在函数中,能让函数提前返回。它可以指定要返回的值,如果没有指定,则返回值是 undefiend
  • break 语句使程序退出一个循环语句或 switch 语句。
6.表达式

最简单的表达式是字面量值(比如字符串或数字)、变量、内置的值(true, false, null, undefined. NaN和Infinity).以new开头的调用表达式、以delete开头的属性提取表 达式、包在圆括号中的表达式、以一个前置运算符作为前导的表达式,或者表达式后面跟着:

• 一个中置运算符与另一个表达式

• 三元运算符?后面跟着另一个表达式,然后接一个:,再然后接第3个表达式;

• 一个函数调用

• 一个属性提取表达式。

三元运算符?有3个运算数。如果第1个运算数值为真,产生第2个运算数的值。但如果 第1个运算数值为假,则产生第3个运算数的值。

image.png

  • typeof 运算符产生的值有 number' ' string', boolean >  undefined''function和'object o如果运算数是一个数组或null,那么结果是'object*,这其实是不对的。typeof的局限性
7.字面量

对象字面量是一种可以方便地按指定规格创建新对象的表示法。字面量就是在代码中直接写出来的值,即字面上的值,并且是固定的,而不是变量。

8.函数

函数的主体包括变量定义和语句