JavaScript语法:ECMAScript(JavaScript)
页面文档对象模型:DOM
浏览器对象模型:BOM
三种书写位置:
行内式:直接写在body标签里面即可
内嵌式:需加标签
外部式:在外部文件直接书写在引入即可 注意:外部引入时script标签中间不可添加内容
Js推荐使用单引号
JavaScript输入输出语句
alert(msg) 浏览器弹出警示框
console.log(msg) 浏览器控制台打印输出信息
Prompt(info) 浏览器弹出输入框,用户可以输入
Js变量的数据类型是只有程序在运行过程中,根据等号右边的值来确定的
Js是动态语言 变量的数据类型是可以变化的
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含整型和浮点型 | 0 |
Boolean | 布尔值类型 | false |
String | 字符串类型 | “” |
Undefined | var a; 声明了变量a没给值 a=undefined |
undefined |
Null | var a=null;声明了变量a为空值 | null |
复杂数据类型:object
isNaN()方法:判断是否为非数字类型,返回布尔值,默认值为false
字符串引号嵌套(外双内单,外单内双)
字符串转义字符,需写到引号里面
有\n(换行),\t(缩进),\b(空格)等等
字符串长度:
可以通过.length来获取字符串的长度
字符串的拼接:
字符串 + 任何类型 = 拼接之后的新字符串
字符串和其他类型相拼接,最终结果都是字符串类型
如: ‘12’ + 12 结果为1212
变量和字符串相连口诀:引引加加(‘++’)
引号就近匹配
Boolean布尔型
true的值为1,参与加法运算当1来看
false 的值为0,参与加法运算当0来看
typeof检测变量为什么数据类型
格式: typeof 变量
如:console.log(typeof age);
null 的数据类型为 object
undefined 的数据类型为 undefined
转换为字符串
①toString() 如:变量.toString()
②String()强制转换 如:String(变量)
③加号拼接字符串(隐式转换) 如:变量 + ‘’
转换为数字型
①parseInt(变量) 如:parseInt(‘78’) 转换为整数
②parseFloat(变量) 如:parseFloat(‘78.21’) 转换为浮点数
③Number()强制转换 如:Number(变量)
④js隐式转换(-*/) 如:’12’ - 0
转换为布尔型
Boolean() 如:Boolean(‘true’)
Length自动检测元素的变化
函数就是封装了一段可以被重复执行调用的代码块
函数使用分为两步:声明函数 和 调用函数 (函数不调用自己不执行)
1.声明函数
function 函数名() {
//函数体
}
2.调用函数
函数名();
把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
我们可以利用函数的参数实现函数重复不同的代码
function 函数名(形参1,形参2…) { // 在声明函数的小括号里面是 形参(形式上的参数,接收实参,类似于一个变量)
}
函数名(实参1,实参2…); // 在函数调用的小括号里面是实参(实际的参数)
函数的返回值格式
function 函数名() {
return 需要返回的结果;
}
函数名();
我们的函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名() 通过return 实现的
只要遇到return 就把后面的结果 返回给函数的调用者 函数名() = return后面的结果
arguments存储了传递的所有实参
arguments展示形式是伪数组,可以进行遍历 (只有函数才有arguments对象,每个函数都具有的内置对象)
伪数组特点:
具有length属性
按索引方式存储数据
不具有数组的push,pop等方法
函数可以相互调用
1.利用函数关键字自定义函数(命名函数)
function fn() {
}
fn();
2.函数表达式(匿名函数)
var 变量 = function() {};
例:
var fun = function(aru) {
}
fun();
注意:
fun是变量名,不是函数名
函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而函数表达式里面存的是函数
函数表达式也可以进行传递参数
函数表达式 调用必须写在函数表达式的下面
就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突
Js的作用域(es6)之前:全局作用域 局部作用域
全局作用域:整个script标签或者是一个单独的js文件
局部作用域(函数作用域):在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
根据作用域的不同变量分为全局变量和局部变量
1.全局变量:在全局作用域下的变量 在全局下都可以使用(在函数内部没有声明直接赋值的变量也属于全局变量)
2.局部变量:在局部作用域下的变量 在函数内部的变量的就是局部变量(只能在函数内部使用),函数的形参也可以看做局部变量
从执行效率来看全局变量和局部变量
(1)全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
(2)局部变量 当我们程序执行完毕就会销毁,比较节约内存资源
内部函数访问外部函数的变量,采取的是链式查找(站在目标出发,一层一层往外查找,就近原则)的方式来决定取决哪个值 这种结构我们称为作用域链
Js引擎运行js分为两步:预解析和代码执行
(1)预解析js引擎会把js里面所有的var还有function提升到当前作用域的最前面
(2)代码执行 按照代码书写的顺序从上往下执行
预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
(2)函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
(其实函数提升是优于变量提升的,同名的变量和函数同时声明了,首先执行的是函数的声明。)
创建对象(对象里面包含属性和方法,其中方法可以用一个匿名函数)
利用字面量创建对象 {}
(1)里面的属性或者方法我们采取键值对的形式 键 属性名 :值 属性值
(2)多个属性或者方法中间用逗号隔开
(3)方法冒号后面跟的是一个匿名函数(方法跟的匿名函数可省略function)
使用对象
(1)调用对象的属性 我们采用 对象名.属性名 . 我们理解为 的
(2)调用属性还有一种方法 对象名[‘属性名’]
(3)调用对象的方法 对象名.方法名() 千万别忘记添加小括号 方法为一个函数
变量和函数,属性和方法四个的区别
变量和函数都是单独存在
属性和方法必须写在对象里面
利用new Object 创建对象
var 变量名 = new Object(); //创建一个空的对象
就是把我们对象里面的一些相同的属性和方法抽象出来封装到函数里面
构造函数的语法格式
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();(调用构造函数,返回的是一个对象)
注意:
1.构造函数首字母要大写
2.构造函数不需要return 就可以返回结果
3.调用构造函数 必须使用new
4.属性和方法前面必须添加this
利用构造函数创建对象的过程称为对象的实例化
for(变量 in 对象) {
}
例:
for(var k in obj) {
console.log(k); // k 变量 输出 得到的是属性名
console.log(obj[k]); // obj[k] 得到的是属性值
}