一、预解析
1.js引擎运行js分为两步:预解析代码执行
(1)预解析:js引擎会把js里面所有的 var 还有 function提升到当前作用域的最前面
(2)代码执行:按照代码书写的顺序从上往下执行
2.预解析:分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升 就是把所有的变量声明提升到当前作用域的最前面 不提升赋值操作
例: console.log(num);
var num=10;
预解析后: var num;
console.log(num);
var num=10;
运行结果: undefined
(2)函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
例: fn();
var fn=function{
console.log(22);
} //这是一个函数表达式,函数的调用要写在函数表达式后面
此程序会报错
预解析后:var fn;
fn();
fn=function{
console.log(22);
}
二、对象
1.对象
对象:是由一系列无序的相关属性和方法的集合
2.创建对象的三种方式
(1)利用字面量创建
例:var obj={uname:'张三',age:12,sayHi:function(){console.log('hi')}}
特点:①对象中的属性和方法采用键值对的形式
②多个属性或方法之间用','链接
③方法冒号后面跟的是一个匿名函数
(2)用new Object创建
例:var obj = new Object()//创建一个空的对象
obj.uname='张三';
obj.age=12;
obj.sayHi=function(){
console.log('hi');
}
特点:采用的是:对象名.属性=值;对象名.方法=function(){}
(3)用构造函数创建
构造函数:把对象相同的属性和方法抽取出来封装到一个函数中。
构造函数的格式: function 构造函数名(){
this.属性=值;
this.方法=function(){}
}
规范:①构造函数函数名首字母大写
②不需要return就可以返回结果
③调用构造函数必须用new 例: var obj = new Star();
④属性和方法前必须有this
对象的实例化:利用构造函数新建对象的过程也叫对象的实例化
3.JavaScript中对象分为3种:
1.自定义对象
2.内置对象
3.浏览器对象
前两种是JS基础内容,属于ECMAScript
第三种属于浏览器特有的
内置对象:就是JavaScript语言自带的对象 例:Math、Date、Array、String对象等。
4.Date对象
· ①Date()对象是一个构造函数,使用前必须现实例化
②var date=new Date(); 没有参数就返回当前时间
③参数的常用写法: 数字型 例:2019,10,1
字符串型 例:“2019-11-1”
④获得Date总的毫秒数 毫秒数是当前时间距离1970年1月1日的毫秒数
方法: valueOf() getTime()
使用过程: var date = new Date;
console.log(date.valueOf());
console.log(date.getTime());
方法:+new Date() 最常用的写法
var date1 = +new Date();
console.log(date1);
方法:H5新增的 获得总的毫秒数
console.log(Date.now());
5.数组对象
1.创建数组的两种方式:
①利用数组字面量:
var arr1=[1,2,3];
②利用new Array()
var arr2=new Array(); //创建了一个空数组
var arr2=new Array(2);//表示这个数组长度为2 里面2个空的数组元素
var arr2=new Array(2,3);//等价于[2,3]
2.检测是否为数组方法:
①instanceof
例:
var arr=[];
console.log(arr instanceof Array); //结果true
var obj={};
console.log(obj instanceof Array); //结果false
②Array.isArray()
例:
var arr=[];
console.log(Array.isArray(arr));
3.添加删除数组元素:
①push() 在数组末尾添加一个或多个数组元素
例:
var arr=[1,2,3];
arr.push(4);
console.log(arr); //[1,2,3,4]
arr.push(4,5);
console.log(arr); //[1,2,3,4,5]
②unshift() 在数组开头添加元素
例:
var arr=[1,2,3];
arr.unshift(0);
console.log(arr); //[0,1,2,3]
4.删除数组元素:
①pop() 删除最后一个元素
②shift() 删除第一个元素
添加和删除数组:
5.数组排序:
sort(function(a,b){return a-b;//升序反之return b-a;是降序排序})
6.数组的索引方式:
7.数组转换为字符串:
8.字符串对象:
①基本包装类型:就是把简单的数据类型包装成一个复杂数据类型。 还包括:String Number Boolean
②字符串不可变:指的是字符串里的值不可变,虽然看上去看可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间
③字符串所有的方法,都不会修改字符串本身,操作完成会返回一个新的字符串
④根据字符返回位置
⑤根据位置返回字符(!!)