js中:
1.对空(Null)、未定义(Undefined)、Symbol 、函数(Function) 都是数据类型(js不像java中,声明了变量会有默认值,在js中只声明变量而没有赋值的时候,类型就是Undefined类型,并不会有默认值。js中NUll和Undefined也是不一样的)
2.js语言是大小写敏感的语言
3.js拥有动态类型,即var 声明了一个变量后可以赋值各种不同的数据类型的值
4.js对象是键值对的容器。和java对象一样拥有属性和方法,不过方法的定义 是作为一个函数定义存储在对象属性中,最终表现为键值对的形式(methodName : function() { code lines });调用方法时,不加()以字符串方式原样输出,加了()才是以函数运算结果的方式输出
5.js可以直接向未声明的变量赋值,该变量将被自动作为 window 的一个属性,是全局对象的可配置属性,可以删除
6.变量作用域问题:
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。(同5)函数参数只在函数内起作用,是局部变量。在每个代码块(不是function的方法体中)中 JavaScript 不会创建一个新的作用域,一般各个代码块的作用域都是全局的。
总结起来就是:在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。并没有像java那样的块级作用域的概念的。且变量是可以重置的(重复声明赋值)
es6之后新增let关键字 :let 声明的变量只在 let 命令所在的代码块内有效,且同一个作用域里,不能重置变量,不会被变量提升,需要先申明再使用(这个和java是很像的了)
7.函数function的返回值是可选的,且不用向java那样声明返回值得类型
8.js中的字符串既可以用双引号也可以用单引号,且可以直接利用索引位置来访问字符串中的每个字符。(不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用)
9.==表示值相等。===表示绝对等于,值和类型都相等;
10.!= 表示不等于。!==表示不绝对等于,只要值和类型有一个不相等或者都不相等都返回true
11.for/in 语句循环遍历对象的属性,for (x in person) // x 为属性名,只能用person[x]取值方式取值,而不能用person.x因为x是变量
12.null和undefined的值相等,但是类型不想等;null==undefined 返回true,null===undefined 返回false
13.js中使用typeof 操作符来检测变量的数据类型。
14.注意:
NaN 的数据类型是 number
数组(Array)的数据类型是 object
日期(Date)的数据类型为 object
null 的数据类型是 object
未定义变量的数据类型为 undefined
function 的数据类型是 function
15.js中类型转换使用全局方法:Number() 转换为数字, String() 转换为字符串, Boolean() 转化为布尔值。js中存在自动类型转换,这会导致输出的不是期望的值
16.js变量提升:
变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部,但是初始化的不会。所以变量可以在使用后声明,也就是变量可以先使用再声明。
17.switch 语句会使用恒等计算符(===)进行比较:
18.在 s中,分号是可选的 ,JavaScript 默认是在代码的最后一行自动结束。
19.js不支持使用名字来索引数组,只允许使用数字索引。
20. js 中 this 不是固定不变的,它会随着执行环境的改变而改变:
在对象的方法中,this 表示该方法所属的对象。
如果单独使用,this 表示全局对象。
在函数function中,this 表示全局对象。
在函数function中,在严格模式下,this 是未定义的(undefined)。
在事件中,this 表示接收事件的元素。
类似 call() 和 apply() 方法可以将 this 引用到任何对象。
21.JSON 是用于存储和传输数据的格式。JSON 格式在语法上与创建 JavaScript 对象代码是相同的(都是键值对的集合);JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本;
文本可以被任何编程语言读取及作为数据格式传递。
22.void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值
-----------------------------------------------------函数部分---------------------------------------------------------------------
23.函数表达式可以存储在变量中,在函数表达式存储在变量后,变量也可作为一个函数使用;
24.函数同样可以通过内置的 JavaScript 函数构造器(Function())定义 ,但是一般js中应该避免使用new的方式创建对象
25.函数也可以提升,即先使用后声明,但是使用表达式定义函数时无法提升。
26.函数可以自调用,(函数表达式)();
27.函数是一个对象,有自己内部的参数和方法
28.新增箭头函数(函数无非就是参数,函数体和返回值。抓住这三点很好理解)
29.JavaScript 函数定义显式参数时没有指定数据类型
30.ES5 中如果函数在调用时未提供隐式参数,参数会默认设置为: undefined
31.JavaScript 函数有个内置的对象 arguments 对象,argument 对象包含了函数调用的参数数组。
32.值传递和引用传递和java是一样的
33.js闭包我理解不了
34.事件传播机制:
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件
35.区分开DOM对象和BOM对象(浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话"。)
---------------------------------------------对象---------------------------------------
36.JavaScript 类
JavaScript 是面向对象的语言,但 JavaScript 不使用类。
在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。
JavaScript 基于 prototype,而不是基于类的。
37.js中数组元素是对象,所有可以存放很多类型。这个和java是不一样的
38.原型prototype是JavaScript全局构造函数。它可以构建新Javascript对象的属性和方法