JavaScript练习笔记
1、分析下段代码输入出结果是(B)
var a,b,c; 隐式类型转换
a=”2”;
b=2;
c=a+b;
console.log(c);
A.4 B.22 C.20 D.2
自动类型 String() Number()
1. 字符串相加 转成字符串 再拼接
2. 四则运算 1+b 都是字值 直接计算 3+字符串
3. !运算 自动转换成布尔值 字符串 数值 true
2、分析下段 代码输入出结果是(B)
var x,y;
x=10;
y=x++;
console.log(y);
A.9 B.10 C.11 D.12
前 先计算再赋值;后 相反
3、分析下段代码输入出结果是(D) //D这里true被转为1
var num;
num=5+true;
console.log(num);
A.true B.false C.5 D.6
类型转换 布尔值转换成true->1
4、分析下段代码输入出结果是(B)
var arr = [2,3,4,5,6];
var sum = 0;
for(var i=1;i<arr.length;i++){
sum+=arr[i]
}
console.log(sum);
A.20 B.18 C.14 D.12
5、数组的扩展中,不属于用于数组遍历的函数的是:(D)
A、keys( )
B、entries( )
C、values( )
D、find( )
var arr = [“aaa”,”bbb”,”ccc”];
//1.keys == 索引 0 1 2
var k = arr.keys() //迭代器
Console.log(k.next().value) 0
Console.log(k.next().value) 1
Console.log(k.next().value) 2
//2.entries 键值对 key-value
var entry = arr.entries();
Console.log(entry.next().value) [0,’aaa’]
Console.log(entry.next().value[0]) aaa
//3.values value
var values = arr.values();
Console.log(values.next().value) aaa
Console.log(values.next().value) bbb
Console.log(values.next().value) ccc
//find
var res = arr.find(k => k === “bbb”);
Console.log(res) bbb
6、以下代码运行的结果是(B) //B自执行函数的作用域是window, 所以当b=20即修改了全局的b
var a = b = 10;
(function(){ //自执行函数
var a =b=20 //基本功 b=20;var a = b
})();
console.log(b); //全局
A.10 B.20 C.报错 D.undefined
7、在JS中,‘1555’+3的运行结果是(C)
A.1558 B.1555+3 C.15553 D.报错
8、以下代码运行后弹出的结果是(B)
var a = 888;
++a;
alert(a++);
A.888 B.889 C.890 D.891
9、用javascript实现打开一个新窗口,地址为index.html,正确的方法是(A)
A.window.open(“index.html”,””,””); //浏览器dom bom (浏览器对象模型) 单应用页面 div
B.window.open(””,“index.html”,””);
C.window.open(””,””,“index.html”);
D.window.open(“”,””,””);
10、[1,2,3,4].join(“0”).split("")的执行结果是(C)
A."1,2,3,4"
B.[1,2,3,4]
C.[“1”,“0”,“2”,“0”,“3”,“0”,“4”]
D."1,0,2,0,3,0,4"
11、以下ECMAScript变量命名格式正确的是(A) 这里考的变量命名,不能以保留字
、-
、数字
开头,了解下
A._125dollor B.1207A C.-dollor D.this
12、下面不属于ECMAScript规范的范围的是:(C) //C ECMA不制定DOM规范,主要是针对JS语言规范定制
A、数据类型
B、语法
C、DOM事件
D、内置对象和函数的标准库
13、在javascript程序中加入注释,方法有:(AB)
A、//注释内容
B、/*注释内容/
C、/*注释内容
D、/*注释内容
14、数组方法中哪个说法是错的(C ) //unshift是头部添加,其它3个是正确的
A、push()尾部添加
B、pop()尾部删除
C、unshift()尾部添加
D、shift()头部删除
解释题
解释:
1、”==”
和“===”
的不同
答案:“==”
表示等于,左边等于右边;“===”
表示恒等。
console.log(1=='1')//隐式类型转换
console.log(1==='1')//无类型转换
2、函数声明与函数表达式的区别
答案:函数表达式 var fun = function(){} 2种声明方式 函数声明方式存在变量提升,表达式没有提升,即表达式的要先定义再调用。
3、AJAX执行原理
XMLHttpRequest
特点:请求方式,回调结果
4、分析代码的执行结果并描述原因:
var a = 10;
function f1(){ //函数里也有变量提升初始化a=b=c=undefined
var b = 2 * a;
var a = 20;
var c = a+1;
console.log(b); //nan:not a number
console.log(c);
}
f1()
答案:b=20,c=21.
改:nan,21,这是涉及变量提升,即函数f1中会先初始化a为undefined,再a*2就为nan, 再对a赋值。
5、根据当前目录结构在页面动态展示:
//多层级的数据结构 3for(错了)
//递归 自己调用自己
Function Fun(){
If(满足条件){
Fun();//自己调用自己 死循环 没有终止条件
}
}
Function Fun(){
If(){ //如果有child并且child成都大于0
Fun();//自己调用自己 死循环 没有终止条件
}
}
///
var data = [
{
name:'AAA',
child:[
{name:'a1',child:[{name:'a1-1'},{name:'a1-2'}]},
{name:'a2'},
{name:'a3',child:[{name:'a3-1'},{name:'a3-2',child:[{name:'a3-2-1'},{name:'a3-2-2'}]}]}
]
},
{
name:'BBB',
child:[{name:'b1'},{name:'b2'},{name:'b3'}]
},
{
name:'CCC',
child:[{name:'c1'},{name:'c2'},{name:'c3'}]
}
];
//是用递归的方式实现,因为数据的层次是不确定的
//递归实现
function loading(data){ //递归装载所有数据并通过ul li展示
var html = "<ul>";
data.forEach(item => {
html += "<li>"+item.name+"</li>"
//继续添加child
if(item.child && item.child.length > 0){
html += loading(item.child)
}
});
html += "</ul>";
return html; //所有的节点ul li字符串
}
var res = loading(data);
document.getElementById("tree").innerHTML = res;