1.javaScript允许对任意数据类型做比较,如boolean与number,false==0//true false === 0//false
== 比较:自动转换数据类型进行比较,很多时候得到相当诡异的结果
=== 比较:不会转换数据类型,如果数据类型一致,进行比较,如果数据类型不一致,false;
由于这个缺陷,我们在比较的时候要使用=== 比较,不要使用==比较
2.number 表示,整数,浮点数,NaN :not a number当计算结果无法使用number进行表示的时候就是NaN,infinity 无限,当计算结果超出javascript表示的时候,就会显示这个
3.NaN是个例外,他与所有的值都不相同,包括自己,NaN ===NaN //false 判断是不是NaN 只能靠函数isNaN(),我们以后尽量用Number.isNaN()函数
4,null 与undefined null 表示为空,undefined表示未定义,但是多数情况下,不用区分这两者的区别,平常我们应该用null,undefined 在判读函数参数是否传递的情况下有用
5.数组:数组没有数据类型要求,如[1,"a",NaN,true],我们可以通过索引来访问数组
6.对象:对象是一组键值对,对象的键都是字符串类型,对象的值可以是任何类型,访问对象的属性通过.属性进行访问
7.变量:变量通过=赋值,变量用var声明,变量可以多次赋值,可以不是同一种数据类型,但是var只声明一次即可
8.strict模式:var 在javascript中并不是必须声明的,但是不声明的话,javascript 就会自动声明为全局变量;所以我们在开发中应该使用strict模式,声明使用strict模式,就在我们的JavaScript代码第一行加上'use strict'
9.字符串:
1.多个字符串相连,可以用+号连接起来,跟java一样,也可以使用模板字符串,如:
var name = '小明';
var age = '18';
var message = name +age;或者 var message = `${name}${age}`;注意这里的引号是反引号,不是引号
2.字符串的一些常见操作,大体跟java类似;包括length,index,substring,toUpcase,tolowerCase
10.数组:
1.直接给array的length赋值会导致数组的大小变化,没有数据的位置补undefined
2.通过indexof来搜索指定位置的元素
3.slice 截取数组产生一个新的数组,类似于substring;如果不给slice传递任何参数,他会截取整个,我们可以利用这个特性,复制一个数组
4.push 是向数组后面添加若干元素,pop()是删除数组最后一个元素
5.unshift 向数组的头部添加一个元素,shfit 删除第一个元素
6,sort 对数组进行排序,直接调用时按照默认的进行排序
7.reverse 把数组反转
10.splice,修改数组的万能方法,如splice(2,3,‘1’,‘2’);从索引2开始删除3个元素,再添加两个,是包括前面的索引的,如前面的例子,索引2的元素是被修改了的
11.contact,将两个array拼接在一起,并返回一个新的数组。注意是返回一个新的数组;
12.join 把数组元素用指定的字符串链接起来,并返回一个新的字符串,如join('-'),
11.对象:
1.对象的键如果包括特殊字符,需要用‘’包括起来,而且访问必须用[] 来访问,所以,我们尽量命名标准的键名
2.如果访问一个不存在的属性,不会报错,会返回undefinde
3.可以自由的给对象添加和删除属性
4.可以用in判断一个对象是否拥有某项属性,但是如果该对象的父类也拥有该属性,那么用in判断会返回true;所以我们可以用hasOwnProperty()来判断
12.条件判断:
javascript 把null,0,NaN,undefined,''空字符串视为false,其他的都视为true;
13.循环:
1.var i; for(i=0;i<100;i++)
2.没有条件的循环,for(;;),用这种循环需要语句体里面有break;遇到 Invalid or unexpected token问题,竟然是因为写的代码中英文不一样导致;
3.for in 可以把一个对象的属性都遍历出来,由于array是对象,所以也能用for in 进行遍历
14.map:
初始化map :var map = new Map([key,value],[key,value]);
函数:map.set(key,value)添加 map.has(key)查询 map.get(key) 获取 map.delete(key) 删除
15.函数:
1.定义和调用;
1.JavaScript 允许传入任意个参数,多少都无关系,不会报错。。
2.arguments 只在函数中起作用,指向调用者传入的所有参数,也就是说,函数即使不定义任何参数,我们还是可以拿到调用者传进来的参数,实际上,我们用arguments判断传入参数的个数;
3.reset参数:
2.变量与作用域
1.如果一个变量在函数体内声明,他的作用域就是这个函数体,
2.函数可以嵌套,内部函数可以使用外部函数声明的变量,反之,则不行
3.javascript定义的函数有个特性,就是,函数会先扫描所有声明的变量,并提升到函数顶部,根据这一特性,我们要养成先声明所用用到变量的习惯
4.不在任何函数内定义的变量就具有全局作用域,JavaScript默认有一个全局对象,window
5.任何变量先会在函数体内查找,如果没有找到就会向上查找,只到查到window,也就是全局作用域,如果还没找到,就会报referenceError
3.名字空间
把所有的全局变量或者顶层函数都放到window里面很容易造成命名冲突而且不容易被发现,所以一个办法就是把自己定义的全局变量和顶层函数都放到一个变量里面,比较著名的JavaScript库都是这么干的
4.局部作用域:如我们用循环所需的变量,就是局部,在es6中,用let代替var声明块级变量
5.常量:在es6之前,我们只能变量名大写来表示这是一个常量,不要去修改,在es6中,我们可以用const来声明常量
6.解构赋值
3.高阶函数:
map:对每个元素进行加工
reduce:对两个元素进行加工,这个两个元素中的第一个元素是前面加工后的元素
filter :筛选出元素,参数为函数,函数返回true,保留,返回false,筛选掉
sort:排序,跟java中的compator类似
4.闭包:函数中定义函数,然后函数延迟执行,用来对标类里面的成员变量
5.generator:yeild 暂停函数,
16.标准对象:
1.Date 获取事件对象
2.RegExp 正则
3.Json
17.对象:
1.定义一个对象跟声明一个函数没有差别,但是调用的时候,函数是直接调用,对象需要使用new 构造函数,为了区分二者,在命名的时候一般情况下,对象首字母大写,函数首字母小写
2.我们可以创建一个createObj函数,这样我就不用new了,而且参数也是比较随便的
3.在es6中对象的写法跟java类似,继承的关键字是extends