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

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

作者: 好奇而已 | 来源:发表于2017-04-15 18:01 被阅读13次

    JavaScript 定义了几种数据类型? 哪些是原始类型?

    • 共有六种

    数值(number):整数和小数(比如1和3.14)
    字符串(string):字符组成的文本(比如"Hello World")
    布尔值(boolean):true(真)和false(假)两个特定值
    undefined:表示“未定义”或不存在,即此处目前没有任何值
    null:表示空缺,即此处应该有一个值,但目前为空
    对象(object):各种值组成的集合

    • 原始类型
      数值、字符串、布尔值,即基本数据类型

    哪些是复杂类型?原始类型和复杂类型的区别是什么?

    • 对象是复杂类型,分成三个子类型
      狭义的对象(object)
      数组(array)
      函数(function)
      正则表达式 (regexp)
    • 区别

    1 一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器;
    2 基本类型变量存的是值,复杂类型的变量存的是内存地址;
    3 基本类型在赋值的时候拷贝值,复杂类型在赋值的时候只拷贝地址,不拷贝值;

    typeof和instanceof的作用和区别?

    • typeof运算符 :可以返回一个值的数据类型.用来检测一个对象是否已经定义或者是否赋值.
      1)原始类型
      数值、字符串、布尔值分别返回number、string、boolean。
    typeof 123 // "number"
    typeof '123' // "string"
    typeof false // "boolean" 
    

    2)函数返回function。
    3)undefined返回undefined。
    4)除此以外,其他情况都返回object。

    • instanceof
      instanceof主要的目的是检测引用类型,判断对象是Array,还是RegExp
    var array=new Array();  
    var object=new Object();  
    var regexp=new RegExp();  
    function func(){};  
    var func1=new func();  
      
    alert(array instanceof Array);  //true  
    alert(object instanceof Object);  //true  
    alert(regexp instanceof RegExp);  //true  
    alert(func1 instanceof func);  //true  
    
    • 区别
      ypeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的是基本数据类型,instanceof主要检测的是引用类型!

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

    typeof 1 // "number"
    typeof "asd" // "string"
    typeof true // "boolean"
    typeof function{alert("asd");} // "function"```
    
    
    
    ## NaN是什么? 有什么特别之处?
    - NaN(Not a number),表示非数字,NaN和任何值都不相等,自己不等于自己:
    `NaN == NaN  //false`  
    
    
    
    
    ## 如何把非数值转化为数值?
    - parseInt()将参数转化为整数
    parseFloat()将参数转化成浮点数
    number()将参数转换成数字类型
    
    
    
    ## ==与===有什么区别
    - ===不会自动转换数据类型,只当**数据类型和值两者都一致**才返回ture;NaN和自身不相等.
    而==会自动转换数据类型再比较,若值相等则返回ture.
    
    
    ## break与continue有什么区别
    - break 用于强制退出循环体,执行循环后面的语句
    - continue 用于退出本次循环,执行下次循环
    
    

    for(var i = 1; i< 10; i++){
    if(i % 4 === 0){
    break; //若执行到这一步,就终止外面的for循环体.
    }

    console.log(i);
    

    }

    for(var i = 1; i< 10; i++){
    if(i % 4 === 0){
    continue; //若执行到这一步,就跳过 i = 4的打印结果.然后继续i = 5的计算.
    }

    console.log(i);
    

    }

    
    
    
    
    ## void 0 和 undefined在使用场景上有什么区别
    - **void 0**:它是一个一元操作符,它的唯一作用就是返回一个undefined,不管这个操作符后面传的操作数是什么
    1.点击不做跳转 
    

    <a href="javascript:void(0);">
    Click here to do nothing
    </a>```
    2.用于闭包避免解析错误

    void function fn(){
      console.log("I will show immediately.")
    }()
    为什么不直接使用undefined这个值的字面量形式呢?
    :因为undefined
    既不是保留字,也不是关键字,它可以作为变量标识符赋值,所以你手写出来的undefined是有可能被覆盖的
    
    • undefined
      (1)变量被声明了,但没有赋值时,就等于undefined。
      (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
      (3)对象没有赋值的属性,该属性的值为undefined。
      (4)函数没有返回值时,默认返回undefined。
    var i;
    i // undefined
    
    function f(x){console.log(x)}
    f() // undefined
    
    var  o = new Object();
    o.p // undefined
    
    var x = f();
    x // undefined
    

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

    console.log(1+1); // 2
    原因: 都是数值类型相加.1+1=2.
    
    console.log("2"+"4");//  "24"
    : 字符串拼接.
    
    
    console.log(2+"4"); // "24"
    : 一个数值与一个字符串相加时,会把其中的数值转为字符串,结果就是2个字符串拼接.
    
    console.log(+"4");// 4
    :+会将字符串转换为数字.
    

    以下代码的输出结果是?

    var a = 1;  
    a+++a;  
    typeof a+2;//"number2"
    
    因为:
    var a = 1;  
    (a++)+a;  //1+1=2
    (typeof a)+2; //"number"+2="number2"
    

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

     var a = 1;
     var b = 3;
     console.log( a+++b );//4
    : ( a+++b )= (a++)+b;
    而(a++)+b=1+3=4;
    
    
    

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

    var arr = [3,4,5]

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

    遍历 JSON, 打印里面的值

    var obj = {
     name: 'hunger', 
     sex: 'male', 
     age: 28 
    }```
    答:
    

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

    
    
    
    ## 以下代码输出结果是? 为什么 (选做题目)
    

    var a = 1, b = 2, c = 3;
    var val = typeof a + b || c >0
    console.log(val) //number2
    : 因为typeof的优先级较高所以typeof a 为number,此后又与b拼接为"number2",对于||运算符,两边都为true则返回前者

    
    

    var d = 5;
    var data = d ==5 && console.log('bb')
    console.log(data)//"bb"
    :因为&&左边为true,
    而对于 expr1 && expr2,如果expr1 能转换成false则返回expr1,否则返回expr2.

    
    

    var data2 = d = 0 || console.log('haha')
    console.log(data2)//"haha"
    : ||的左边=0,即false
    对于expr1 || expr2,如果expr1能转换成true则返回expr1,否则返回expr2

    
    

    var x = !!"Hello" + (!"world", !!"from here!!");
    console.log(x)//2
    :右边为 ture+ (false,true). = 1+1=2

    ---
    
    [参考](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
    
    运算符:
    ![Paste_Image.png](https://img.haomeiwen.com/i735918/1a20103c462901ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

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

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