笔试经常会考的一些JavaScript基础

很多人在网上找js的笔试题,大部分题都很有深度,今天我们就来看看那些看似简单得不能再简单的题,我们是怎么失分的。

 

1 变量相关的问题

var a = 10;
    function demo(){
        b = 20;
var c=2; console.log(a
+ b); }
console.log(c); //is not define
console.log(a); // 10 console.log(b); //20
console.log(delete a); //false
console.log(delete b); //true

对于这道题的考点有两个 :

           Ⅰ.局部变量和全局变量

                    ⅰ.全局变量:定义在函数外面的变量就是全局变量 ;局部变量:定义在函数内部的变量就是局部变量;

                    ⅱ.局部变量的作用域:就是只是在函数体的内部起作用;全局变量:在页面中都起作用;

                    ⅲ.在函数内部没有使用 var 关键字声明的变量,会自动成为全局变量,也就是成为直接添加在window上的属性;

          Ⅱ. delete 关键字可以删除哪些变量

                    ⅰ. delete 关键字可以删除没有使用var 声明的变量;

                    ⅱ.delete 无法删除用var声明的变量;

                    ⅲ.delete删除成功返回true,失败返回false ,如果删除的变量或者属性根本不存在,也会返回true

 

 

2 赋值问题

 var str1 = "abc";
    var str2 = str1;
    console.log(str1);
    console.log(str2);
    str1 = "love";
    console.log(str2);
    obj1 = {name:"Bob"};
    var obj2 = obj1;
    console.log(obj1.name);
    console.log(obj2.name);
    obj2.name="Green";
    console.log(obj1.name);

输出结果:

abc
abc
abc
Bob
Bob
Green

考点:值类型的赋值与引用类型的赋值

              Ⅰ.值类型(5种):number  string  boolean  undefined  null

                           ⅰ. 值类型的赋值操作:是把等号右边的内容(具体的数据)给左边的变量

                           ⅱ. 特点:修改其中一个值对另一个值没有影响,因为他们是相互独立的

              Ⅱ. 引用类型:除了值类型以外的其他类型,例如  Function  Object  Array  Date .......

                           ⅰ. 把等号右边的内容(地址)复制一份给左边的变量

                           ⅱ.特点:修改其中一个值,对另一个有影响,因为它们共享的一份数据

 

图解分析:

 

 

2 运算问题

2.1 在看这道运算符相关的题目之前,我们首先得知道,字符和数值都是可以参加逻辑运算的。先上一道简单的小菜:
    var num1=10;
    var str1 = "10";
    var num2 = 20;
    console.log(num1 + num2 + str1);
    console.log(num1 + str1 + num2);

打印结果:

    console.log(num1 + num2 + str1);  //3010
    console.log(num1 + str1 + num2);  //101020

这道题目打印的结果很容易理解:看相加的类型是不是数值

                       ① 如果是:数值直接相加

                       ② 如果数字类型和字符串相加的时候,数字类型会转换为字符串类型

 

2.2 升级版的 :数值的逻辑运算
    var num1 = 7;
    var num2 = 8;
    var num3 = 0;
    var num4 = 0;
    // 与运算
    console.log(num1 && num2); 
    console.log(num2 && num1); 
    console.log(num1 && num3);
    console.log(num3 && num4);
    console.log(num3 && num2);
    //或运算
    console.log(num1 || num2);
    console.log(num2 || num1);
    console.log(num1 || num3);
    console.log(num3 || num4);
    console.log(num3 || num2);

运算结果:

    console.log(num1 && num2);  //8
    console.log(num2 && num1);  //7
    console.log(num1 && num3);  //0
    console.log(num3 && num4);  //第一个0
    console.log(num3 && num2);  //0
    //或运算
    console.log(num1 || num2);  //7
    console.log(num2 || num1);  //8
    console.log(num1 || num3);  //7
    console.log(num3 || num4);  //0第二个
    console.log(num3 || num2);  //8

题目分析:

       ① 首先,我们需要知道所有的数值都有真假性,除0以外,所有数值都为真;

       ② 逻辑 && 和逻辑  || 都有短路现象:

                 ⑴ 逻辑 && 的短路现象:因为逻辑 &&是一个条件为假,则为假;所以,当第一个条件为假时,第二个条件不会执行

                 ⑵ 逻辑 || 的短路现象:因为逻辑 || 是一个条件为真,则为真;所以,当第一个条件为真时,第二个条件不会执行

结论分析:

      Ⅰ. 数值参与逻辑运算时,返回的值不是boolean型,而是其中一个数值。

      Ⅱ. 对于&&运算:

                      ⅰ. 如果 num1 && num2 结果为真,那么返回的最终的值是第二个表示真的值;

                      ⅱ. 如果结果是假,那么返回第一个为假的值。

     Ⅲ. 对于||运算:

                      ⅰ.如果 num1 || num2 结果为真,那么返回第一个为真的值;

                      ⅱ. 如果为假,返回第二个为假的值。

 

2.3 字符串的逻辑运算
posted @ 2017-03-27 17:33  张晓艳  阅读(299)  评论(0)    收藏  举报