blog icon indicating copy to clipboard operation
blog copied to clipboard

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

Open yongheng2016 opened this issue 8 years ago • 0 comments

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

  • 6种原始类型:

    • String
    • Number
    • Boolean
    • Null
    • Undefined
    • Symbol (ECMAScript6新定义)
  • 复杂类型:

    • Object(对象可以分成三个子类型)
      • 狭义的对象
      • 数组
      • 函数
  • 区别:

    • 原始类型:它们是最基本的数据类型,不能再细分;
    • 复杂类型:就是一种无序的数据集合;一个对象往往是多个原始类型值的合成,可以看作是一个存放各种值的容器。

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

  • 作用: typeof 和 instanceof 都能用来判断一个变量是否为空或者是什么类型的变量;
  • 区别:
    • typeof
      • 用来获取变量的类型。一般返回如下结果:number、boolean、string、undefined、function、 object。
      • 判断一个变量是否存在。如:if(typeof a! = 'undefined'){ };不要用if(a){ }因为如果a不存在(未声明)则会出错。
      • 局限性。对于Array、Null等特殊对象使用typeof一律返回object,这个正是它在此的最大局限性。
    • instanceof:用来判断一个变量是否是某个对象的实例: 如:
      var arr=new Array( ); console.log(arr instanceof Array); 返回ture note:这里的instanceof测试的object是指js语法中的object,不是指dom模型对象。

参考:http://www.cnblogs.com/eoiioe/archive/2008/12/31/1366081.html

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

if (typeof a === 'number'){ alert('ture') } //返回ture,证明数字;否则不是。 if (typeof a === 'string'){ alert('ture') } //返回ture,证明字符串;否则不是。 if (typeof a === 'boolean'){ alert('ture') } //返回ture,证明布尔;否则不是。 if (typeof a === 'function'){ alert('ture') } //返回ture,证明函数;否则不是。

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

NAN是一个全局对象的属性;在编码很少使用,通常都是计算失败返回的值;如:

  • 作为Math的某个方法返回值出现 Math.sqrt(-1)
  • 尝试解析一个字符串失败 parseInt("blabla")

等号运算符(==或===)不能判断一个值是否是NAN,必须用 Number.isNAN( ) 或 isNAN( ) 函数;并且NAN不等于它自己;

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

  • 部分值转换(只转换字符串的数字部分)
    • parseInt( ) ;
    • parseFloat( ) ;

parseInt 和 parseFloat区别:https://github.com/yongheng2016/blog/issues/29

  • 全值转换(转换全部的字符串,所以字符串內只有全部是数字才会转换成功,否则返回NAN)
    • Number( ) ;
    • '34' ;
    • '34'-0 ;

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

区别:简单说,它们的区别是相等运算符(==)比较两个值是否相等,严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符(===)直接返回false,而相等运算符(==)会将它们转化成同一个类型,再用严格相等运算符进行比较。

参考:http://javascript.ruanyifeng.com/grammar/operator.html#toc9

  • 严格相等 === 全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个比较的值类型不同,这两个值也是不全等的; 如果两个比较的值相等,类型也相同,并且都不是number类型时,两个值全等; 如果两个值都是number类型,当两个值不是NAN时,并且两个数值相等,或两者值分别是+0和-0,也是全等的;
  • 非严格相等 == 相等操作比较两个值是否相等,比较前会隐式转换成相同类型;

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness

推荐使用===理由:https://zhuanlan.zhihu.com/p/22745278

7.break与continue有什么区别

  • break:立即终止、跳出循环语句或lable语句(如果不是再循环里面,lable是必写的,如果是标记的是语句块,break必须嵌套在它所引用的语句当中);

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/break

  • continue:和break类似,但不同的是;continue不会终止循环的迭代,而是
    • 在while循环中跳回到条件判断;
    • 在for循环中跳转到更新语句;

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/continue

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

void:无论void后的表达式是什么,void操作符都会返回undefined

  • 通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。

  • 填充的href确保点击时不会产生页面跳转; 填充的src,确保不会向服务器发出垃圾请求。

    • 希望点击的链接不会发生任何跳转,而是引发一些交互操作;如果不写url会刷新页面;所以这时用href="javascript:void(0)的方式
    • 如果我们要生成一个空的src的image,最好的方式似乎也是src='javascript:void(0)'

undefined:undefined在javascript中不是保留字。可以赋值为其它值;

参考:https://segmentfault.com/a/1190000000474941

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;  
    typeof a+2;    //number2

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

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

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

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

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

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

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

    var a = 1, b = 2, c = 3;
    var val = typeof a + b || c >0     //(typeof a)+b 为ture 后面不看
    console.log(val)   //number2

    var d = 5;
    var data = d ==5 && console.log('bb')   //(d==5) && _console.log('bb')_->undefined
    console.log(data)   //undefined

    var data2 = d = 0 || console.log('haha')   0->false 看后面 console.log('haha')-console.log('haha')->undefiend
    console.log(data2)    //undefined

    var x = !!"Hello" + (!"world", !!"from here!!");   //  ture + ( false,ture)  ->  1+1
    console.log(x)

yongheng2016 avatar Jun 04 '17 02:06 yongheng2016