一些简单又常见的js基础题

662 阅读3分钟

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、三种创建对象方法的区别

  1. 函数名创建法
  2. 匿名函数创建法
  3. 构造函数创建函数
  • ==区别==
  • 普通函数名创建,在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选项错误