0%

javascript基础学习--提炼


导论:

1.轻量级的脚本语言,“脚本语言”–不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本

2.一种嵌入式(embedded)语言,一种嵌入式(embedded)语言

3.核心语法部分相当精简,只包括两个部分:基本的语法构造(比如操作符、控制结构、语句)和标准库

4.它提供的额外 API 可以分成三大类。

浏览器控制类:操作浏览器
DOM 类:操作网页的各种元素
Web 类:实现互联网的各种功能

5.目前最有希望、前途最光明的计算机语言之一。

6.能力(作用):目前唯一一种通用的浏览器脚本语言,所有浏览器都支持。它可以让网页呈现各种特殊效果,为用户提供良好的互动体验。

7.Node:Node 项目使得 JavaScript 可以用于开发服务器端的大型项目,网站的前后端都用 JavaScript 开发已经成为了现实

8.JavaScript 最终将能让你只用一种语言,就开发出适应不同平台(包括桌面端、服务器端、手机端)的程序

9.一种开放的语言。它的标准 ECMA-262 是 ISO 国际标准

10.实验环境:推荐Chrome 浏览器的控制台

11.两种方法进入控制台:

直接进入:Ctrl + Shift + J
开发者工具进入:快捷键是 F12 ; Ctrl + Shift + I,然后选择 Console 面板

12.代码换行:Shift + Enter键

历史

1.JavaScript 因为互联网而生,紧跟着浏览器的出现而问世

2. JavaScript 和 Java 两种不一样的语言,但是彼此存在联系。

3.JavaScript 语法要比 Java 自由得多。

4.ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。在日常场合,这两个词是可以互换的。

基本语法:
(1)语句
1.执行单位为行,一行一行地执行。一般情况下,每一行就是一个语句。

2.赋值:var命令(JavaScript 是一种动态类型语言,变量类型没有限制,可以随时改变)

3.语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。

4.分号前面可以没有任何内容,JavaScript 引擎将其视为空语句。

(2)变量

1.可以先声明再赋值,或者声明即赋值

2.如果只是声明变量而没有赋值,则该变量的值是undefined。(使用该变量浏览器会报错)

3.重新声明一个已经存在的变量,是无效的

4.覆盖:如果第二次声明的时候还进行了赋值,则会覆盖掉前面的值。

5.变量提升:JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行

(3)标识符
6.大小写敏感

7.标识符命名规则:

第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9。

8.以下保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

(4)注释

1.单行注释: //起头

2.多行注释: 放在//之间

3.兼容 HTML 代码的注释

4.–>只有在行首,才会被当成单行注释,否则会当作正常的运算。

(5)区块

1.大括号,将多个相关的语句组合在一起,称为“区块”(block)。

(6)条件语句(if,switch)

1.JavaScript 提供if结构和switch结构,完成条件判断,即只有满足预设的条件,才会执行相应的语句

2.结构类似Java,可单行执行简单语句

3.支持三元运算符

(7)循环语句(while,for,do while循环)

1.结构类似Java,可单行执行简单语句

(8)程序控制:break 语句和 continue 语句

1.标签(lable),相当于定位符,用于跳转到程序的任意位置,类似go语言

数据类型

1.6种基本数据类型:
数值(number):整数和小数(比如1和3.14)。
字符串(string):文本(比如Hello World)。
布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)。
undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何 值。
null:表示空值,即此处的值为空。
对象(object):各种值组成的集合。

2.对象是最复杂的数据类型,分成三个子类型。
狭义的对象(object)
数组(array)
函数(function)

3.typeof运算符:返回一个值的数据类型。

4.null与undefined都可以表示“没有”,含义非常相似

5.null与undefined在if语句中,它们都会被自动转为false

6.null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null

7.除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
“”或’’(空字符串)

8.JavaScript 内部,所有数字都是以64位浮点数形式储存,也就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)

9.小数注意也有精度损失

10.NaN是 JavaScript 的特殊值,表示“非数字,但是它的数据类型依然属于Number

11.Infinity表示“无穷

12.Infinity的四则运算,符合无穷的数学计算规则。

13.isNaN方法可以用来判断一个值是否为NaN。

14.isFinite方法返回一个布尔值,表示某个值是否为正常的数值。

15.字符串放在单引号或双引号中都行

16.单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。

17.单引号字符串的内部,使用单引号,必须在内部的单引号前面加上反斜杠,用来转义,双引号内部使用双引号也是一样

18.字符串默认只能写在一行内

19.连接运算符(+)可以连接多个单行字符串

20.反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。

21.\n :换行符;\t :制表符;\r :回车键

22.引用字符串方括号中的数字超过字符串的长度,或者方括号中根本不是数字,则返回undefined

23.字符串内部的单个字符无法改变和增删,这些操作会默默地失败。

24.length属性返回字符串的长度

25.JavaScript 引擎内部,所有字符都用 Unicode 表示

26.对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。

27.对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

28.如果键名是数值,会被自动转为字符串

29.如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。例如键名为“1p”,这种不是纯数字的类型,但是以数字开头的,需要加上引号

30.对象的每一个键名又称为“属性”

31.读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。

32.如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。

33.方括号内数字键可以不加引号,因为会自动转成字符串。

34.点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值。

35.Object.keys()方法查看一个对象本身的所有属性

36.delete命令用于删除对象的属性,删除成功后返回true

37.只有一种情况,delete命令会返回false,那就是该属性存在,且不得删除。也就是说删除没有的属性也会返回true

38.in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false

39.for…in循环用来遍历一个对象的全部属性。

40.for…in循环有两个使用注意点:

它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。
举例来说,对象都继承了toString属性,但是for…in循环不会遍历到这个属性。

41.with语句的格式如下:

with (对象) {
语句;
}
作用:操作同一个对象的多个属性时,提供一些书写的方便(不推荐使用)

42.如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量

43.JavaScript 有三种声明函数的方法:

1.function 命令
//因为函数是第一等公民,所以如果调用在函数声明前面是不会报错的s
2.函数表达式(变量赋值的写法,将一个匿名函数声明给一个变量)
//函数表达式的对于函数表达式,则必须等到解释器执行到它所在的代码行,才会被真正解析执行–>既如果在函数表达式前调用此函数表达式,则会报错
3.Function 构造函数(几乎无人使用)

44.采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。

45.如果同一个函数被多次声明,后面的声明就会覆盖前面的声明。

46.JavaScript 语言将函数看作一种值,与其它值(数值、字符串、布尔值等等)地位相同。凡是可以使用值的地方,就能使用函数。–>所以函数被称为第一等公民

47.JavaScript 引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会像变量声明一样,被提升到代码头部

48.函数的name属性返回函数的名字

49.函数的length属性返回函数预期传入的参数个数,即函数定义之中的形式参数个数。

50.函数的toString()方法返回一个字符串,内容是函数的源码

51.全局变量,局部变量,与Java相似

52.内部作用域,外部作用域,与Java相似

53.与全局作用域一样,函数作用域内部也会产生“变量提升”现象。但是函数内部var命令声明的变量,不管在什么位置,变量声明都会被提升到这个函数内部体的头部。

54.函数参数不是必需的,JavaScript 允许省略参数。

55.函数参数如果是原始类型的值(数值、字符串、布尔值),传递方式是传值传递

56.但是,如果函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递
,所以会涉及到原始值的改变

57.arguments对象函数体内部读取所有参数

58.闭包(closure)是 JavaScript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。与go语言相似,将一个函数作为返回值,就可以实现函数外部读取到函数内部的变量

59.根据 JavaScript 的语法,圆括号()跟在函数名之后,表示调用该函数。

60.function关键字出现在行首,一律解释成语句,所以这时候如果末尾加上()进行自调用就会报错

61.eval命令接受一个字符串作为参数,并将这个字符串当作语句执行。如果参数字符串无法当作语句运行,那么就会报错

62.eval缺点:

不利于引擎优化执行速度
并且eval内部可以改写外部变量,存在安全风险

63.javascript的数组:任何类型的数据,都可以放入数组。

64.多维数组,与java相似

65.本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object

66.用数值和字符串作为键名,结果都能读取数组。原因是数值键名被自动转为了字符串。

67.数组的length属性,返回数组的成员数量。

68.数组是一种动态的数据结构,可以随时增减数组的成员,比如length-1

69.如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位

70.数组本质上是一种对象,所以可以为数组添加属性,但是这不影响length属性的值

71.检查某个键名是否存在的运算符in,适用于对象,也适用于数组

72.for…in循环不仅可以遍历对象,也可以遍历数组,毕竟数组只是一种特殊对象。但是,for…in不仅会遍历数组所有的数字键,还会遍历非数字键。(但是不推荐使用for…in遍历数组。可以考虑使用for循环或while循环)

73.当数组的某个位置是空元素,即两个逗号之间没有任何值,我们称该数组存在空位(hole)。

74.数组的空位不影响length属性

75.数组的forEach方法、for…in结构、以及Object.keys方法进行遍历,空位都会被跳过。(如果某个位置是undefined,遍历的时候就不会被跳过。)

运算符

1.共提供10个算术运算符,用来完成基本的算术运算。与Java相似

2.JavaScript 允许非数值的相加

3.如果运算子是对象,必须先转成原始类型的值,然后再相加
首先,自动调用对象的valueOf方法。
这时再自动调用对象的toString方法,将其转为字符串

4.比较运算符,与java相似,多了:
=== 严格相等运算符
!== 严格不相等运算符
与普通相等运算符区别就是如果两个值不是同一类型,严格相等运算符(===)直接返回false,普通运算符会先将它们转换成同一个类型,再用严格相等运算符进行比较。

5.如果两个运算子都是原始类型的值,则是先转成数值再比较

6.与NaN的比较。任何值(包括NaN本身)与NaN使用非相等运算符进行比较,返回的都是false

7.undefined和null与自身严格相等。

8.undefined和null只有与自身比较,或者互相比较时,才会返回true;与其他类型的值比较时,结果都为false

9.布尔运算符用于将表达式转为布尔值,与Java相似

10.以下六个值取反后为true,其他值都为false。

undefined
null
false
0
NaN
空字符串(’’)

11.二进制运算符

12.void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined

13.圆括号(())可以用来提高运算的优先级,因为它的优先级是最高的,即圆括号中的表达式会第一个运算。

语法专题

1.强制转换主要指使用Number()、String()和Boolean()三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值
// 空字符串转为0
Number(‘’) // 0

// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0

// undefined:转成 NaN
Number(undefined) // NaN

// null:转成0
Number(null) // 0

2.String函数可以将任意类型的值转化成字符串,转换规则如下。

(1)原始类型值

数值:转为相应的字符串。
字符串:转换后还是原来的值。
布尔值:true转为字符串”true”,false转为字符串”false”。
undefined:转为字符串”undefined”。
null:转为字符串”null”

3.Boolean()函数可以将任意类型的值转为布尔值。

它的转换规则相对简单:除了以下五个值的转换结果为false,其他的值全部为true。
undefined
null
0(包含-0和+0)
NaN
‘’(空字符串)

4.自动转换,它是以强制转换为基础的,如“==”比较前会进行两边转换

5.JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象

6.错误对象的三个函数:

message:错误提示信息
name:错误名称(非标准属性)
stack:错误的堆栈(非标准属性)

7.Error实例对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误对象

8.SyntaxError对象是解析代码时发生的语法错误。

9.ReferenceError对象是引用一个不存在的变量时发生的错误

10.RangeError对象是一个值超出有效范围时发生的错误

11.TypeError对象是变量或参数不是预期类型时发生的错误

12.URIError对象是 URI 相关函数的参数不正确时抛出的错误

13.eval函数没有被正确执行时,会抛出EvalError错误

14.以上这6种派生错误,连同原始的Error对象,都是构造函数,都可以手动生成错误对象的实例。这些构造函数都接受一个参数,代表错误提示信息(message)。

15.throw语句的作用是手动中断程序执行,抛出一个错误

16.JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。

17.Object的原型对象:Object.prototype,定义在这个原生对象上的方法可以被所有实例化的对象调用

18.Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。

19.Object.keys方法和Object.getOwnPropertyNames方法方法类似,参数是一个对象,返回一个数组(成员是该对象的属性);不同点在设计枚举属性的时候;一般情况下,几乎总是使用Object.keys方法

20.Object类主要有6个实例方法,很多静态方法

21.JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为–“属性描述对象”(该属性是否可写、可遍历等等)

22.属性描述对象的各个属性称为“元属性”,因为它们可以看作是控制属性的属性。

23.一旦定义了取值函数get(或存值函数set),就不能将writable属性设为true,或者同时定义value属性,否则会报错

坚持原创技术分享,您的支持将鼓励我继续创作.