1、var a=0xFF 转换为16进制的字符串,然后转换为10进制数值
var a = 0XFF;
var b = a.toString(16);
var c = parseInt(b, 16);
console.log(a,b,c);
2、var i=1;var sum=i + i +++ i +++ i +++ i + i
- 计算
sum = i + i + ++i + ++i + ++i + i
sum = 1 + 1 + 2 + 3 + 4 + 4
sum = 15
3、请写出if(!a){} if(a == undefined){} if(a === undefined){} ,哪些 a 满足
- 结果
- "" ,null, undefined,0,false,NaN
-
4、var s=3;s=(s+=2) && s++ && s--;求S
- 结果
- 6
5、将a-z进行倒序
- 代码
var s = "";
var str = "abcdefghijklmnopqrstuvwsyz"
for(var i = str.length - 1; i >= 0; i--){
s += str[i];
}
console.log(s);
6、深度复制和浅度复制
//深度复制
var obj1=JSON.parse(JSON.stringify(obj));
//浅度复制
var obj1={};
for(var prop in obj){
// console.log(prop);
obj1[prop]=obj[prop];
}
==注意==
- 深度复制改变内层对象原对象也不会改变,在栈中建立新地址
- 浅度复制改变内层对象,原对象内层对象也会改变,内层对象的地址还是原对象地址
7、三种创建对象方法的区别
- 答
- 函数名创建法
- 匿名函数创建法
- 构造函数创建函数
- ==区别==
- 普通函数名创建,在script执行时就创建放入堆中,在栈中以函数名作为变量引用堆中这个函数地址,在预解析时,普通函数也会被解析在最前面,所以在script标签的任何位置都可以调用这个函数
- 匿名函数创建,创建好的匿名函数赋值给变量,变量什么时候定义,这个变量才能在栈中产生,才可以被调用
- 构造函数创建,每个参数都必须是字符串,除了最后一个参数是函数的语句块,前面所有的参数都是该函数的参数,执行效率低 可以接收后端的字符串创建
8、打印下列代码中所有的value值
var obj={
value:1,
link:{
value:2,
link:{
value:3,
link:{
value:4,
link:{
value:5,
link:{
value:6,
link:{}
}
}
}
}
}
}
- 获取代码
for(;obj.link;obj=obj.link) console.log(obj.value);
9、arguments. callee,argument. callee. caller,argument. callee .name分别代表什么?
- arguments. callee : 当前函数
- argument. callee. caller : 当前函数的父函数
- argument. callee .name : 当前函数的名字
10、以下代码运行的结果是输出
var a = b = 10;
(function (){
var a =b =20;
})();
console.log(b);
- 结果为20
- ==解析==
- var a = b =10;
- =>var a = 10 ,b = 10;
- b是伪全局变量,函数中的var a = b =20给b重新赋值为20
-
11、JavaScript基本数据类型
- number string boolean undefined null symbol
- 一种引用类型: object
12、下面语句得到值为true的有
- A、"1" == 1
- B、1 === "1"
- C、"2" > "19"
- D、"2" == 19
- ==答案== A、C
- ==解析==
- 比较相等两个等号会有隐式类型转换,只需值相等即可,三个等号必须类型和值同时相等结果才为true,故A对B错
- 字符串之间的大小比较是按照ASCII编码大小,"2"的ASCLL码比"1"的ASCLL大,所以C正确
- 数字跟字符串比较大小会将字符串隐式转换为数字,即 2>19,D选项错误