1.声明函数的两种方式分别是如何编写的?js中的作用域是怎样的?function 函数名(){
}
//函数表达式var 变量名 = function(){
}
2.js中的预解析是什么?它是怎么做事情的?js的预解析会在执行代码之前先把代码 读 一遍,找到var,function声明的变量和函数,进行变量名提升和函数名提升变量名提升: 找到var声明的变量名,将变量名的声明提前到所有代码的前面函数名提升:找到function声明的函数名,将函数名和函数关联在一起。
3.有几种方式可以创建js中的对象?分别是什么?两种var obj1 = { }var obj2 = new Object()var obj3 = new 构造函数()
new 构造函数()发生了什么事情创建一个空的对象将构造函数中的this 指向空的对象 // this = { }通过this给空对象添加属性或者方法将创建好的对象作为构造函数的返回值 返回。
4.对象中可以包含属性和方法,这些属性和方法统一被称之为对象的成员,请问如何遍历并打印出这些成员来?var obj = { name:”jack”, jumpSea:function(){
}}
for(var k in obj){ console.log( k )
console.log( obj[ k ] )}

1.日期对象Date

Date是一个构造函数,我们需要通过new来调用构造函数创建日期实例对象var myDate = new Date();// 实例化了一个日期对象myDate,它是一个当前日期var myDate2 = new Date(‘2020-10-10 10:10:10’); //通过参数设置日期的时间。
myDate.getFullYear();// 获取 年 信息myDate.getMonth();// 获取 月 信息,信息从0开始的(0~11),最终要给他+1myDate.getDate();// 获取 日 信息,myDate.getDay();// 获取 周几 信息,周日是0,周一是1.。。。周六是6.myDate.getHours();// 获取 小时 信息myDate.getMinutes();// 获取 分钟 信息myDate.getSeconds();// 获取 秒数 信息
获取毫秒数的方式:myDate.getTime();// 获取 毫秒数 信息,它是从1970.1.1 开始到现在为止的毫秒数+new Date();// +prompt(‘’)Date.now();
//我们在工作中,有可能会计算两个日期之间 的间隔var date1= new Date(‘2020-06-12’)var date2= new Date(‘2020-07-09’)
var timespan = date2 - date1;// 两个日期之间的毫秒数var days = timespan / (24_60_60*1000)

2.数组

A.创建数组的两种方式 var arr = [ 1,2,3 ]; var arr2 = new Array( 2 );//实际上创建了一个有两个空元素的数组 var arr3 = new Array( 1,2,3 );// arr3和arr保存的都是 数字1,2,3的数据
B.检测变量是否为数组的两种方式: console.log( arr instanceof Array );//判断arr是否是由Array构造函数创建出来的 console.log( Array.isArray( arr2 ) );//判断arr2是否为一个数组
C.向数组添加元素 arr.push(4); // 将一个或多个元素追加在数组的后面 arr.unshift(5,6) // 将一个或多个元素添加在数组的最前面
D.删除数组中的元素 arr.pop(); //pop方法没有参数,删除数组中的最后一个元素,并且将这个删除的元素作为返回值 arr.shift(); //shift方法没有参数,删除数组中的第一个元素,并且将这个删除的元素作为返回值
[可选]E.在es5中,为数组添加了一个筛选的方法,filter map,filter,forEach,some,every
F.反转数组,数组排序 arr.reverse();// 反转数组中的元素的顺序 arr.sort( function(a,b){ return a-b; // 升序 } )
扩展题: 假设有一个数组,保存了多个同学的信息 var students = [ { name:’jack’,score:98 }, { name:’rose’, score:77 } ]
G.数组搜索方法 arr.indexOf( 10 ) ;// 在arr数组中查找是否有一个元素是10,如果有就返回这个10 所在的索引为止,如果没有就返回-1 arr.lastIndexOf( ‘jack’ )// 在arr数组中查找是否有一个元素是10,如果有就返回这个10 所在的索引为止,如果没有就返回-1
注意:indexOf从第0个元素开始查找,找到最后一个元素,lastIndexOf从最后一个元素开始查找,找到第0个元素。
H.将数组转换为字符串的方法 arr.toString();// 将数组中的元素用逗号连起来形成一个字符串如[1,2,3] => “1,2,3”
arr.join(“_”);// 将数组中的元素用join方法的参数字符串连起来形成一个字符串如[1,2,3] => “1_2*3”
推荐课后查阅的方法:slice() splice() contact()

3.数据类型的一些基本知识

复杂数据类型有对象和数组,对象有属性也有方法,数组也有属性和方法基本数据类型一般来说只是纯粹的数据而已,正常来说它应该是没有方法可以使用的。但是js为了操作基本数据类型的数据更加简便,专门为基本数据类型创建了对应的对象形式。
js为基本类型数据提供了对应的包装类型:字符串 -> String, 当你使用字符串调用方法或者属性的时候,js解释器就会new String()创建一个字符串对象,然后调用对应的属性或者方法,执行完毕之后,销毁字符串对象.数值 -> Number,布尔 -> Boolean
最终体现的效果就是我们的字符串可以通过点语法去访问字符串的属性和方法了。
字符串不可变:var str = “abc” + “efg”

4.字符串的方法

A.查找特定字符出现的索引位置 str.indexOf( ‘春’ ) ;// 在str中查找是否有一个文字是春,如果有就返回这个春 所在的索引为止,如果没有就返回-1 str.lastIndexOf( ‘春天’ )// 在str中查找是否有一个字符串是春天,如果有就返回这个春天 所在的索引为止,如果没有就返回-1
B.根据索引获取文字或者 ascii 码 str.chatAt( 1 );// 找到str字符串,根据索引1 找到对应索引的文字,将文字返回 str.chatCodeAt( 2 );// 找到str字符串,根据索引2 找到对应索引的文字,返回文字的ascii码 // ASCII码 A:65 B:66 a:97 B:98 str[0] : //找到str字符串中的第一个文字。
C.字符串拼接方法,字符串截取 str.contact(str1,str2); // str + str1 + str2 //str.substr( 开始的位置, 截取多少个字符 ) var res = str.substr(1,5);// 从索引1开始 截取5个字符
str.slice(开始的索引,结束的索引) ;//slice,substring两个方法的第二个参数都是结束的索引,但是真正截取字符串的时候 //不会截取到这个索引,而是到这个索引位置-1. str.substring(开始的索引,结束的索引)
D.字符串转换为数组, 字符串替换 var str = “2020-10-10” var arr = str.split(‘-‘);// 将字符串按 - 进行分隔
var str2 = ‘我爱你中国,中国真厉害,中国真漂亮’; // 把字符串中所有的中国换成老婆。 str2 = str2.replace( /中国/g ,’老婆’)

5.简单数据类型,复杂数据类型

A.简单数据类型(值类型):因为保存的是确切的值,所以也被称为值类型简单类型的数据存储空间由操作系统进行分配和释放,它们被存储在栈里面
var num = 123;
B.复杂数据类型(引用类型):因为变量保存的不是确切的数据,而是数据的引用地址,所以也被称为引用类型复杂类型的数据存储空间由垃圾回收机制进行回收, 引用地址存储在栈里面,真实数据存储在堆里面。// obj 变量保存的不是 真实的对象数据,而对象的引用(地址)var obj = { name:”jack”}

6.值类型的数据传参

当我们将值类型的数据作为实参传递到函数的内部。在函数内部,对传递过来的数据进行修改。他是不会影响到外面的实参的。

7.引用类型的数据传参

当我们将引用类型的数据作为实参传递到函数的内部。传递的实际上是 引用地址 在函数内部,通过传递过来的引用地址可以去修改对象中的属性或者方法。无论函数内部的引用地址还是函数外部的变量保存的都是同一个对象的地址。当在函数中对 对象进行修改的时候,外面的变量访问的对象也一起发生了变化。