21、do-while循环的使用及while的区别
do-while() 无论条件是否成立至少执行一次,和while规则一样,唯一不同的是do{}while会先执行一次(先执行后判断
22、对for循环的理解
for(第一个是:循环变量也是初始化变量;第二个是判断循环条件;第三个是改变循环变量){
....代码块
}
循环变量: 用于控制循环是否结束的变量(给变量赋初始值,只执行一次)
循环条件: 判断循环是否继续(每次都会执行)
改变循环变量:用于改变循环变量(每次都会执行)
23、while和for的区别
a、for循环是知道了循环次数,while是不知道循环次数
b、for限定了循环次数
c、while是条件循环
24、break和continue return的区别
a、continue:continue只是中止本次循环,接着开始下一次循环 ,只能出现在循环中
b、break:break用于完全结束一个循环,跳出循环体 不在执行break下面的代码,只能出现在选择或者循环中
c、return:返回函数的值,不在执行return下面的代码,只能出现函数中
25、什么是一个函数
官方解释:由事件驱动的或者当它被调用时执行的可重复使用的代码块
白话:函数就是一个方法、一个功能
26、让函数执行的几种方式
a、js是基于事件驱动的语言、因此可以通过js的事件来调用函数让函数执行
b、直接写函数名加()
c、立即执行函数。在字面量函数后面({}后面加())
27、定义函数的几种方式
a、关键字函数:function fnName(){};
b、字面量函数:var fn = function(){};
c、构造函数:var fn = new Function()
28、函数的作用
a、减少代码的编写(代码重复利用)
b、隐藏处理细节,便于今后的修改和维护
c、控制执行时机
29、对参数的理解
a、参数分为:形参和实参
b、有了参数以后可以使函数变的更加灵活
c、形参和实参要一一对应
d、如果对应的形参没有传值,那么值是undefined
30、js的编译和执行
a、js的预编译:
把var 和 function 定义的变量提升到script的最上方
赋值语句不会被提升,哪怕等号后面是一个function
b、js执行:代码从上往下执行
31、js的变量声明提升
变量声明和函数声明从他们代码中出现的位置被移动到执行环境的顶部,这个过程就叫做提升 只有声明操作会被提升,赋值和逻辑操作会被留在原地等待执行
Js编译器会把变量声明看成两个部分分别是声明操作(var a)和赋值操作(a=2)
32、作用域链
简单说就是作用域集合 当前作用域 -> 父级作用域 -> ... -> 全局作用域 形成的作用域链条
33、console.log与console.dir的区别
console.log()可以取代alert()或document.write(),在网页脚本中使用console.log()时,会在浏览器控制台打印出信息。
console.dir()可以显示一个对象所有的属性和方法。
34、对arguments的了解
a、函数内部自带的一个对象
b、存储的是所有的实参
c、可以使用[]及下标访问arguments中的内容 arguments[0] 访问第一个实参
d、可以使用 arguments.length 确定传入实参的个数
e、最常用的用途: 判断传入参数的个数(根据参数个数做不同的事情)
35、递归:函数调用函数自身。
36、递归与循环的区别
递归算法:
优点:代码简洁、清晰,并且容易验证正确性。
缺点:
a、它的运行需要较多次数的函数调用,如果调用层数比较深,每次都要创建新的变量,需要增加额外的堆栈处理,会对执行效率有一定影响,占用过多的内存资源。
b、递归算法解题的运行效率较低。在递归调用的过程中系统为每一层的返回点、局部变量等开辟了栈来储存。递归次数过多容易造成栈溢出等
注意:递归就是在过程或函数里调用自身;使用递归策略时要注意的几个条件
a、必须有一个明确的递归结束条件,称为递归出口。
b、递归需要有边界条件、递归前进段和递归返回段。
c、当边界条件不满足时,递归前进。当边界条件满足时,递归返回。
循环算法:
优点:速度快,结构简单。
缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环
37、对js中堆栈的了解
js变量存储有栈存储和堆存储,基本数据类型的变量存储在栈中,引用数据类型的变量存储在堆中 引用类型数据的地址也存在栈中
当访问基础类型变量时,直接从栈中取值。当访问引用类型变量时,先从栈中读取地址,在根据地址到堆中取出数据
38、undefined 和null的区别
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
undefined:
a、变量被声明了,但没有赋值时,就等于undefined。
b、 调用函数时,应该提供的参数没有提供,该参数等于undefined。
c、对象没有赋值的属性,该属性的值为undefined。
d、函数没有返回值时,默认返回undefined。
null:
a、 作为函数的参数,表示该函数的参数不是对象。
b、 作为对象原型链的终点。
39、对象类型的好处
使得信息的传递更方便快捷
40、构造函数是的作用
构造函数是初始化已创建好的对象中成员变量的
41、数组的概念及作用
概念:一组(一般情况下相同类型)的数据(不一定都是数字)
作用:就是一个容器,将多个数据保存起来
42、创建数组的几种方式
a、var arr = new Array();
b、var arr = Array
c、var arr = [];
43、如何判断一个对象是不是数组
数组.instanceof Array
44、数组常用的方法
a、push: 在数组最后添加一个或者多个元素,返回添加后数组的长度
b、pop: 从数组最后取出一个元素,返回的是数组的最后一个元素(取出的元素)
c、unshift: 和push相反,从数组的第一位的前面开始添加
d、shift: 和pop相反从数组的第一位开始取,返回取出的值
e、sort 排序方法
f、reverse 反转
上面的6种方式都在原数组进行操作,会改变原本的数组
45、如何将数组转换为字符串?如何将字符串转换为数组
var str = 数组.join('')
var arr = 字符串.split('')
除此之外还有toString()
46、slice与splice的区别
slice只能截取一段字符串
splice:可以替换 插入 删除
47、值传递与引用传递
值传递:传递的是基本数据类型的数据(数据不会发生改变)
引用传递:传递的是对象(数组、对象)对象存储在堆空间中,自身可以发生改变
48、什么是json
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,用来来存储和表示数据
语法:
[
{键:值},
{键:值},
{键:值},
]
49、什么是ES5?js中的'use strict'是什么?目的是什么?
ECMA Script5:ECMA的第五次改版 时间:2009年
'use strict'js的严格模式
目的:
增加更多报错的场合,消除代码运行的一些不安全之处,保证代码 运行的安全。
提高编译器效率,增加运⾏速度。
为未来新版本的JavaScript做好铺垫
50、ES5中新增的数组的方法
indexOf():返回第一次出现的下标
lastIndexOf():返回最后一次出现的下标
forEach():循环
map():映射
filter():过滤