JavaScript是一种脚本语言,主要包括:ECMAScript–提供核心语言功能,DOM–文档对象模型–提供访问操作网页内容的方法和接口,BOM–浏览器对象模型–提供与浏览器交互的方法和接口。
1.JavaScript基本数据类型
先来了解一下检测数据类型的操作符:typeof
eg:var msg = "hello world";alert(typeof msg);
typeof是操作符,后面可以直接加待检测的内容,括号可以加,但是不是必需的
基本数据类型:
①Undefined:只有一个值undefined,当使用var申明一个变量还未初始化时,这个变量的值就是undefined;
②Null:只有null一个值,null值表示的是空对象指针,当我们定义一个变量要用来保存对象时,给该变量初始化为null,要注意,null和undefined是不同的【我们在任何时刻都不必要将任何变量显性的设置为undefined,但是null是有必要的,用来保存对象的变量,在还没有保存对象之前设置为null,体现了null作为空指针的用途,也区别了null和undefined】
③Boolean类型:true&false,其他类型数据转化成Boolean类型,方法–Boolean(被转化的变量)
④Number类型:数据范围是:Number.MIN_VALUE~Number.MAX_VALUE,当一个树超过数据范围是,会自动转换成特殊的值(Infinity/-Infinity),无法继续参与后面的计算,如果想要判断一个数是否在数据范围可以用isFinite()方法。
NaN:Not a Number,用来表示一个本来要返回数值,但是没有返回数值的情况,用==判断时,NaN与任何值都不相等(包括本身),isNaN()方法用来判断一个值是否能被转化成数值,不能返回true。
数值转换:常用的方法:Number(),parseInt(),parseFloat()
(a)Number():Boolean转换成1或0,数字值转化结果为本身,null->0,undefined–>NaN,字符串:空字符–>0,包含十六进制格式–>可以将十六进制转换成十进制,字符串为整数或者小数格式–>转化成整数或小数,其他形式的字符串(包含字母(不是十六进制的格式))–>NaN;
(b)parseInt():与Number()不同之处在于:字符串parseInt()会从头开始解析,直到遇到第一个非数字字符,空字符–>NaN ,可以识别各种整数格式(八、十、十六进制),但在八进制转化时会产生歧义(eg:“070”应该按照十进制转化成70,还是按照八进制转化成56),于是parseInt()方法中可以指定第二个参数,用来指定要解析的字符串是几进制的格式,eg:parseInt(“070”,10)–>70,parseInt(“070”,8)–>56;
(c)parseFloat():与parseInt()相似,不同处一:解析字符串时第一个小数点是有效的,第二个小数点无效,不同处二:会始终忽略前面的0,因此只能解析十进制格式的数,也只能有一个参数。
⑤String类型:
其他类型数据转化成String类型,有两种方法:toString()和String()
toString():null和undefined类型数据没有这个方法,该方法没有参数,但数值在调用toString()方法时,可以传入一个参数指定返回的格式(几进制);
String():当我们不确定要转化数据的类型时,最好用String方法,null返回null,undefined返回undefined
以上五种就是五种基本数据类型,此外还有一种复杂数据类型:Object(之后详细介绍)
2.JavaScript中的==
和===
区别:
==
:相等:先转化再比较:undefined==
null,NaN!=任何数据(包括NaN)
===
:不转化直接比较:undefined!==
null
3.理解JavaScript中的函数:
function+一组参数+函数体
定义函数时,不必要指定是否返回值,任何函数在任何时候都可以通过return来返回值。
ECMAScript中函数参数与其他语言中函数参数不同,ECMAScript是不关心传入参数的类型和数目的,因为在ECMAScript函数内部,参数是以数组的心形式保存的,所以无论传入多少数据或什么类型,在ECMAScript内部都是一个数组。故此,也无法实现像传统意义上的重载,但我们可以通过判断函数内数组的数据类型和数目,来实现方法的“重载”。
4.引用类型
何为引用类型?我们可以用其他语言中的类来理解JavaScript中的引用类型,或者可以称为对象定义。
Object类型:创建方式两种:①new操作符来创建,②对象字面量来创建var 名称 = {属性名:属性值},而对象中属性的调用可以用点表示法或者方括号表示法。
Array类型:创建方法:var array = new Array();或者var array = new Array(数组大小);或者var array = new Array(“red”)(创建包含一项且为“red”的字符串);或者var array = [“red”,“yellow”]
Array数组的length不只是只读的,可以通过设置数组的length,来从数组末尾删除、添加(新添加的每一项都为undefined)
如何检测数组:instanceof或者Array.isArray()两种方法来检测
Array数组的方法:
①toString(),valueOf(),toLocaleString()–生成以逗号分隔的字符串;
②join(指定分隔符号),生成以指定符号分隔的字符串
③栈方法:push()(数组末尾添加新项),pop()(数组末尾移除并返回一项)–后入先出
④队列:push(),shift()(移除返回第一项)–先入先出,还有与shift()相反的方法unshift()在数组前端添加任意个项,并返回新数组的长度
⑤重排序:reverse()–反转数组;sort()–升序排列数组,每项toString()比较得到的字符串
⑥操作方法–不影响原数组
concat(新添加的项)–创建数组的副本,并添加新的项在数组末尾
slice(起始位置,终止位置)–原数组从起始位置到终止位置之间所有项构成的数组
splice(数组中项的位置,要删除的项的数目,新添加的项(可以是多个))–基于该方法可以实现数组中项的删除,添加,替换方法
⑦位置方法:indexOf(),lastIndexOf()
⑧迭代方法:every(给定运行的函数)–每一项运行结果为true,则返回true
some(函数)–有一项运行结果为true,则返回true
filter(函数)–返回运行结果是true的项组成的数组
map(函数)–返回每项运行结果组成的数组
forEach(函数)–每项运行函数,没有返回值,类似于for()
5.基本包装类型:-----方便操作基本类型
每当读取一个基本类型值时,后台就是自动创建一个相对应的基本包装类型对象,方便我们调用一些方法来操作这些数据,这种自动创建的基本包装类型生存期只存在于一行代码的执行瞬间,此外基本包装还可以通过new操作符来创建,这种方式创建的基本包装类型实例生存期在离开作用域之前一直存在于内存中,这种创建方式创建的实例typeof类型为object。
对下面几种情况进行区分:
var obj = new Object(“hello”);
alert(obj instanceof String);//true,用Object构造函数来创建对象,返回基本类型是根据传入值的基本类型来判断的
var value = “25”;
var number = Number(value);//转型函数
alert(typeof number);//number
var num = new Number(value);//基本包装类型构造函数
alert(typeof num);//object
主要了解一下String基本包装类型的方法:
①字符方法:chatAt()–返回给定位置的字符,此外还可以通过方括号加数字索引来获取,charCodeAt()–返回给定位置的字符的字符编码
②字符串操作方法:这些操作字符串的方法都会返回新的字符串,不会改变原字符串
concat()–拼接字符串,可以含有多个参数,常用+来拼接字符串
另外是三个基于子字符串来创建字符串的方法:
slice(),substring()–接受一个或两个参数,分别为开始结束字符位置索引
substr()–与前两种方法不同之处在于第二个参数为返回字符串的字符个数,没有第二个参数则字符串的末尾作为结束标志
当参数为负数时,结果又有所不同:alice()–参数为负数则从字符串右往左开始计数来确定子字符串的开始结束位置;substr()–根据第一个参数为负则从右往左确定开始位置,第二个参数若为负则置为0;substring()–会将所有的负数都置为0来处理
③位置方法
indexOf(),lastIndexOf()–在字符串中查找子字符串,返回子字符串的位置,若没有找到子字符串则返回-1;一个或两个参数:一个参数为子字符串,第二个参数为开始索引的位置。
④trim()—返回删除字符串前后空格后得到的字符串
⑤字符串大小写转换:toUpperCase(),toLocaleUpperCase()–全部转换成大写,toLowerCase(),toLocaleLowerCase()–全部转换成小写。