1.JavaScript组成:
语言核心(ECMAScript)
DOM模型:文档对象模型(对应的树结构)标签 html head title body script
BOM模型:浏览器窗口模型
json:k-v
2.JavaScript在HTML中的用法
直接在HTML页面中插入JS代码,使用
3.两种使用方式的区别
可维护性
可缓存:浏览器可根据设置缓存所有的外部JS文件
适应未来变化
使用内部JS:
(1)在head中使用
4.元素
<noscript>元素包含的内容只会在以下两种情况
浏览器不支持脚本
浏览器支持脚本,但是脚本被禁用了
除过上述两种情况,浏览器不会呈现<noscript>中的内容
5.JS基本语法
(1)弱类型脚本语言,纯解释性语言 ; 使用var定义变量
区分大小写,函数名不能使用typeof来命名,
标识符以字母开始,驼峰式命名规则
采用C语言风格注释,单行注释 // 多行注释(块级注释) /* */
(2)严格模式
“use strict”严格模式下JS的结果会有很大不同
(3)语句:语句以分哈结尾,分号(;)可以省略,但是不推荐
(4)关键字和保留字
(5)变量:可以保存任意类型,用var声明,只声明未初始化。underfined是一种值,表示变量只定义为初始化。
用var定义变量:在函数中用var定义为函数体局部变量,函数结束后自动销毁,
在函数中省略var定义的变量为全局变量,函数结束后仍然有效
一般在方法中使用局部变量,即var+变量名
(6)一条语句可以定义多个变量
var msg=”hello”,num=10,test;
6.数据类型
基本数据类型:Undefined(未赋值)、Null(空)->对象(Object) Boolean(布尔) Number(数字) String(字符串)
引用数据类型:Object(本质是由一组无序的键值对组成)
*****JavaScript变量均为对象,声明一个变量时就创建一个对象。
7.typeof操作符
由于js是弱类型语言,typeof检测给定变量的数据类型,一共有如下几种返回类型:
“undefined”:如果这个变量未定义,或者定义以后未赋值,表示为undefined
“boolean”:变量为布尔类型
“string”:变量为字符串
“number”:变量为数值类型
“object”:变量为对象或者null
“function”:变量值为函数
8.Undefined类型:
该类型只有一个值undefined,在使用var声明变量单未对其初始化时(或者显示声明变量值为undefined)。
9.Null类型
该类型只有一个值为null,该值表示一个空对象指针(用typeof检测null返回object的原因)
undefined派生自null(==返回true)没必要给变量显式的让其为undefined,但有必要定义为null
10.Boolean类型
该类型有两个值:true和false
js中所有类型的值都可以转换成Boolean类型,调用转型函数Boolean().
String:任意非空字符串转换成true,空字符串转换成false.
Number:非零数值转换成true,0和NaN转换成false
Object:任何对象转化成true ,null转换成false
Undefined:n/a转换成true,undefined转换成false。
控制流语句中可以采用上述转换规则使得其他类型自动转换后才能Boolean
11.Number类型
整数:js中定义常用的数值类型有整数和浮点数,数值字面量格式包含八进制,十进制,十六进制
浮点数:数值中包含小数点,并且小数点后至少有一位数,的6个0以上可以使用科学计数法e来表示。
Number由保存范围,超出范围时最小值-INfinity 最大值Infinity
isFinite()检测当前变量是否在保存范围内。
最大值用MAX_VALUE保存,正无穷POSITIVE_INFINITY 负无穷
NaN表示的是非数值,表示一个本来要返回数值的操作数未返回数值的情况:
任何涉及NaN的操作都会返回NaN(NaN/10)
NaN余任何数都不相等包括自己
0除以0会返回NaN,正除以0会返回INFINITY
isNaN()任何不能转换成Number的变量,都会返回true。
12.数值转换
数值转换函数:非数值转化为数值
Number():可用于任何数据类型
parseInt():用于字符串转为Number,忽略前面的数字直至遇到非字符,输出前面的数字
parseInt(“”,转换基数):可以给定第二个参数指明转换成几进制,推荐使用
parseFloat():字符串中第一个小数点有效,parseFloat直接洗十进制值,没有指定基数的用法,
16进制的字符串只会被转换成0,字符串解析为整数,返回整数
13.String类型:”” 或者 ”
字符字面量:
转换为字符串:任何对象的toString()方法,undefined和null没有toString()方法
toString(转换基数):也可以传递转换基数,转换为设置的进制
转换函数String()可以接受任何类型数值。
14.Object类型:
var obj = new Object()
constructor():保存用于创建当前对象的函数
hasOwnProperty(“propertyName”):检查给定属性在当前对象中是否已经存在
isPropertyOf()
15.常见操作符
非操作符:!!=Boolean()
逻辑与(&&):两个true则为true,否则false
加法操作符:任何操作数与String做加法运算,先将其他类型转换层String类型在1进行拼接
减法操作符:任何操作数与Number做“-”,首先把其他类型使用Number()变为Number类型然后做数学减法运算
关系运算符:如果一个操作数为字符串或者其他类型,使用Number()将其转换成数值然后按照减法郭泽进行减法运算
任何操作数与NaN比较,结果为false
相等操作符:
相等或不相等(==):先转换类型再比较
如果一个操作数为布尔值,则将布尔值转换为数值后进行比较
如果一个操作数为字符串,另一个为数值,首先将字符串转换为数值后进行数值比较
null和undefined不能转为其他任何值(与其他比较返回值均为false,,只有当他们两个比较时为true)
全等或不全等(===):仅比较而不进行类型转换
全等操作数在比较前不转换数据类型,只有当两个操作数相等且类型相同情况下才全等。
for-in语句:
=java中foreach
switch在进行比较时采用全等运算符不会发生类型转换
函数:
function functionName(){
return[];
}
js返回值通过函数体的return语句实现,return语句后的任何代码都不会被执行
函数参数:
js函数参数内部使用一个数组来接收,函数不关心数组中有多少参数,也不关心参数类型
在函数体内,使用arguments对象来访问参数数组,arguments.length确定当前函数传入多少个参数
arguments与命名参数值永远保持同步,命名参数与arguments不在同一块内存空间,但是值会保持一致
如果只传入一个采纳数,使用arguments【1】设置的值不会同步到命名空间,因为arguments对象长度是
由传入参数的个数决定的,与命名参数无关
JS函数均为值传递,不存在引用传递
JS函数无重载,如果在JS中定义了两个名字完全相同的函数,后定义的函数会覆盖前面的函数。
函数声明:
1.函数声明(可以先调用,再声明)
2.函数表达书(必须先声明,后调用)var functionName = function(){}
3.立即执行函数:自动调用函数
(function(){
//函数体
})();
动态属性
对于引用数据类型,可以动态添加属性和方法,也可以改变属性和方法。
值复制:基本类型和引用数据类型均为值复制
传递参数:js中所有函数均为值传递
执行环境(环境)
js中年定义变量与函数有权访问的数据
每个执行环境都有与之相关联的变量对象,环境中定义了所有变量与环境都保存在这个对象中
全局执行环境:web浏览器中,window对象(BOM)
在全局执行环境中,所有全局变量和函数都作为window对象的属性和方法
执行环境中所有代码执行完后,该环境销毁,保存在其中的变量和函数会随之销毁。
每个函数都有自己的执行环境,当解析器进入一个函数时,函数的环境会被推入到一个环境栈中,
函数执行完后,将站环境弹出,返回函数进入之前的执行环境。
作用域链:
当代码在一个环境中执行时,会创建变量对象的作用域链
全局执行环境的变量,始终都是作用于链中最后一个对象
标识符解析过程:
解析器沿着作用域链一级一级向上搜索的过程,搜索过程始终从作用域链的前端开始,逐级向后
内部环境可以通过作用域链访问所有外部环境,但外部环境不能访问内部环境中任何变量和函数,
每个环境可以向上搜索作用域链,查询变量和函数名,但是任何环境都不能向下搜索进入另一个环境执行。
延长作用域链:
js中只有以下两种情况会发生作用域链延长:
1.try……catch语句中的catch块
2.with语句
with(location){
var url1 = href+url;
}
with函数中的参数默认作为函数体内所有变量的前置对象
location.url1 = location.href+location.url
js中没有块级作用域:
1.声明变量:
使用var声明的变量会自动被添加到最近的执行环境中,在函数内部,最接近的执行环境就是函数的局部变量。
如果初始化变量没有var使用var声明,则该变量自动添加到全局变量。
2.查询标识符
在搜索标识符的过程中,如果存在一个局部变量定义,搜索过程会自动停止,不再进入父执行环境
局部环境中存在同名标识符,就不再使用父环境中的标识符
3.垃圾收集(动态内存语言)
3.1标记清除
当变量进入环境,将变量标记位“进入环境”,垃圾收集器将永远不会回收此状态变量
Array类型:
1.js数组的每一项都可以保存任何数据类型
2.js数组大小动态调整,可以随着数据的添加自动扩容
创建数组的方式:
1.使用Array构造方法
var colors =new Array(20)
length=20
创建数组并初始化:var colors = new Array(“red”,”yello”,”blue”);
2.数组字面量表示法
数组字面量表示是由一对包含数组的方括号
3。读取和设置值:
要使用方括号提供基于0的数字索引
如果索引下标>数组长度 则数组自动扩容,此时数组的长度length=数组下标+1
4.数组length属性
length属性存放数组项数。始终返回>=0
lenght属性不止是可读的铜鼓设置length属性,可以从数组的末尾移出项或者向数组添加新项
将length属性设置为大于项数的值,新增的每一项值都为undefined
5.转换方法
将数组对象输出时,默认会调用toString()默认数组每一项以“,”分隔 valueof返回原数组
使用join()达到自定义分隔符的目的,如果不给join方法传值,则默认使用“,”分隔
如果数组中某一项为null或者undefined,所有转换方法返回结果以“”表示