美文网首页
JS数据类型,运算符,流程控制语句

JS数据类型,运算符,流程控制语句

作者: basd1995 | 来源:发表于2017-07-29 22:51 被阅读0次

    1.JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?

    • JavaScript定义了六种数据类型。

      • 数值(number):整数和小数(比如1和3.14)
      • 字符串(string):字符组成的文本(比如"Hello World")
      • 布尔值(boolean):true(真)和false(假)两个特定值
      • undefined:表示“未定义”或不存在,即此处目前没有任何值
      • null:表示空缺,即此处应该有一个值,但目前为空
      • 对象(object):各种值组成的集合,对象有三个子类型狭义的对象(object),数组(array),函数(function)。
      • Symbol 是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用。(Symbol 生成一个全局唯一的值)
    • 原始类型

      • 数值
      • 字符串
      • 布尔值
      • Symbol
    • 复杂类型

      • 对象
    • 至于undefined和null,一般将它们看成两个特殊值。

    • 区别

      • 数值、字符串、布尔值称为原始类型(primitive type),即它们是最基本的数据类型,不能再细分了。
      • 对象称为负载类型(complex type),因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。

    2.typeof和instanceof的作用和区别?

    • typeof 是用于返回一个数据其原始的数据类型,对于常见的几大数据类型都可以用typeof 数据类型的方式进行判断。
    typeof "ABC"           // string
    typeof true            // boolean
    typeof 112             // number 
    typeof undefined       // undefined  
    typeof null            // object  
    typeof function (){}   // function
    typeof {}             // object
    typeof []              // object
    
    • instanceof 它用于判断一个变量是否是某个对象的实例。
    var o = {};
    var a = [];
    
    o instanceof Array      // false
    o instanceof Object     //true  Array 是Object的子类,所以也是true
    a instanceof Array      // true
    

    3.如何判断一个变量是否是数字、字符串、布尔、函数

    var a = 变量;
    console.log(typeof a);
    

    4.NaN是什么? 有什么特别之处?

    • NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己
     NaN == NaN;         //false
     parseInt('abc');    //NaN
    

    5.如何把非数值转化为数值?

    • 有三个函数可以把非数值转换为数值
      • Number()
      • parseInt()
      • parseFloat()
    • Number规则相当复杂而且不合理,几乎不使用,常用的是后两个,两个规则类似
      1.忽略字符串前面的空白字符,找到第一个非空白字符
      2.如果第一个字符不是-或者数字返回NaN
      3.如果是继续解析,直到非数值模式为止
      4.0开头会当做八进制,0x开头会当做十六进制,但是可以指定第二个参数指定基数
    parseInt('blue'); //NaN
    parseInt('-23ABS'); // -23
    parseInt('0xf1'); // 241
    parseInt('101', 2); // 5
    

    6.==与===有什么区别

    • 对于string,number等基础类型,==和===是有区别的
      • 不同类型间比较,==比较转化成同一类型后的值看“值”是否相等,===如果类型不同,其结果就是不等
      • 同类型比较,直接进行“值”比较,两者结果一样
    • 对于Array,Object等高级类型,==和===是没有区别的
      • 进行“指针地址”比较

    7.break与continue有什么区别

    • break关键字在switch语句中已经见过,这两个关键字多用在循环语句中
      • break 用于强制退出循环体,执行循环后面的语句
      • continue 用于退出本次循环,执行下次循环

    8.void 0 和 undefined在使用场景上有什么区别

    • undefined在局部作用域内是会被覆盖的,比如 var a,没有赋值前a是undefined,经过一系列运算后,a有值了,就会被赋予新的值,a不再为undefined。
    • void 0,则是在void运算后,无论结果如何,都会返回undefined。

    9.以下代码的输出结果是?为什么?

    console.log(1+1);      // 2  数值相加
    console.log("2"+"4");  // "24"  字符串拼接
    console.log(2+"4");    // "24"  数字转换为字符串进行拼接  
    console.log(+"4");     // 4  在只有一个字符串参数的时候会尝试将其转换为数字
    

    10.以下代码的输出结果是?

    var a = 1;  
    a+++a;                // a++ + a  ==>  1+2=3  ++的优先级比+高
    typeof a+2;           // (typeof a) + 2  ==>  "number2"  typeof优先级高
    

    11.以下代码的输出结果是?为什么?

    var a = 1;
    var b = 3;
    console.log( a+++b );  //a++ + b  ==>  1+3=4  ++的优先级比+高
    

    12.遍历数组,把数组里的打印数组每一项的平方

    var arr = [3,4,5];
    for(var i=0;i<arr.length;i++){
       console.log(arr[i] * arr[i]);
    }
    9
    16
    25
    

    13. 遍历 JSON, 打印里面的值

    var obj = {
     name: 'hunger', 
     sex: 'male', 
     age: 28 
    }
    for (i in obj) {
      console.log(obj[i]);
    }
    hunger
    male
    28
    

    14. 以下代码输出结果是? 为什么

    var a = 1, b = 2, c = 3;
    var val = typeof a + b || c >0
    console.log(val) 
    //"number2"
    // (typeof a)+b 为 "number2"    c>0为false
    //结果为 "number2"
    
    var d = 5;
    var data = d ==5 && console.log('bb')
    console.log(data)
    //bb undefined
    //d ==5为true  typeof console.log('bb')的类型"undefined"为false 
    //结果为输出dd,data为undefined
    
    var data2 = d = 0 || console.log('haha')
    console.log(data2)
    //haha undefined
    //先 0 || console.log('haha')
    // 0为false,typeof console.log('haha')的类型"undefined"为false
    //结果为输出haha,data2为undefined
     
    var x = !!"Hello" + (!"world", !!"from here!!");
    console.log(x)
    //2
    //先 (!"world", !!"from here!!") 为(true,false), 由于(  1  ,  2 )忽略第一个操作数,返回第二个操作数,为false
    // !!"Hello"为true
    //true + true  同为布尔型相加转换为数值相加
    //结果为2
    

    相关文章

      网友评论

          本文标题:JS数据类型,运算符,流程控制语句

          本文链接:https://www.haomeiwen.com/subject/wpmclxtx.html