1. var a; typeof a;  控制台输出结果是什么?

解答:a只被声明,而未被初始化,在javascript中,未初始化的变量默认值都为undefined;

2. var s="1s";s++ 控制台输出结果是什么?

解答:s="1s"为字符串类型,如果字符串遇到算术运算符,可以强制转换为number类型,但是,1s无法转换成number,因而会转成NaN类型;

     此时,s++相当于NaN类型加1,结果仍然是NaN;

备注:

假设,s="1";(此时,字符串1可以被转化成为number 1),然后 s++;

控制台应该先打印s的原始值,然后加1;

3. typeof -Infinity 控制台输出结果是什么?

解答: Infinity类型值虽然表示 正负无穷的意思,但它仍然是一个数,因而其类型一定是number;

4. 10%"0" 控制台输出结果是什么?

解答:a%b 代表的意思是a整除b余数是多少,因而b作为除数;

"0"遇到算术运算符%时自动转为数0,此时0作为除数,结果输出NaN;

5. undefined==null , undefined===null 控制台输出结果是什么?

false=="" , false==="" 控制台输出结果是什么?

  解答:undefined==null (true) , false==""(true)

根据相等运算符定义,两边操作数会被自动转换为相同类型,然后进行比较;

这里,undefined和null的类型都是Object,但是至于为什么二者最终被判定为相等,我很疑惑。

            false和""在比较之前,会先将""转换为布尔型,对应为false,因而等式两边都是false,值也相等;

    至于,undefined===null 和false==="" 控制台都输出false

    因为===代表的是等价运算,要求等式两边的操作数不仅要类型相同,而且要求数值相同才会返回true

6. undefined和null的区别与联系

通常情况下,当我们试图访问某个不存在的或者未赋值的变量时,就会得到一个undefined值。JavaScript会自动将生命时没有进行初始化的变量设为undefined。

例如:   >>> foo

foo is no defined;  (或者,尽管声明了变量,但未初始化,改变量仍然被设为undefined)

而null值不能通过JavaScript来自动赋值,只能通过代码中赋值语句来完成。

  例如: var somevar=null;

重要区别:null和undefined在被转换为其他基本类型时,方法存在一定的区别;

转换为数字:

>>> 1*undefined

        NaN  (说明undefined被转换为NaN类型)

         >>> 1*null

0 (说明null被转换为0)

   转换为布尔型:

      >>> !!undefined

      false

      >>>!!null

      false    (说明在转换为布尔型值时二者表现一样)

     转换为字符串:

      >>> ""+null

      "null"

      >>> ""+ undefined

      "undefined"  (二者既有相同也有区别,相同的是都是将其类型和字符串拼接,不同的是二者类型不同)

7. var v=v||10; 控制台输出什么?

  解答:首先,解释||(逻辑或)运算。只要||两边的操作数任一为true,则运算结果为true;

     其次,解释惰性求值。在一个连续的逻辑操作中,操作结果在最后一个操作完成之前就已经明确了的话,那么该操作往往不必再继续执行了,因为这已经不会对最终结果产生任何影响。

例如, >>> true||false||true||false

true  (在第一个true出现时,已经可以决定运算的结果,因而后续判断不再执行)

       例2: >>> true||"something"

true  (在判断逻辑或左边为true时,中断运算,输出true)

>>> "something"||true

"something"

         >>> "something"||false

"something"   (先将"something"转换为布尔型,判断其为true,中断运算,输出"something")

     因而,var v=v||10;此时 v是undefined,转换为布尔型为false,仍需要判断逻辑或右边的10,10转换为布尔型为true,因而运算结果为10,并且10被赋值给v,控制台输出v等于10;

备注:  如果将v分别设置为100,0,null结果又将是什么?

     测试1: var v=100; v=v||10;

         输出结果 100;

       测试2: var v=0; v=v||10;

          输出结果 10;

       测试3: var v=null; v=v||10;

          输出结果 10;

       上述例子证明了例2中的陈述;

        

JavaScript基本数据类型(较易混淆的几个概念)的更多相关文章

  1. JavaScript中易混淆的DOM属性及方法对比

    JavaScript中易混淆的DOM属性及方法对比 ParentNode.children VS Node.prototype.childNodes ParentNode.children:该属性继承 ...

  2. 【C#小知识】C#中一些易混淆概念总结---------数据类型存储,方法调用,out和ref参数的使用

    这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框架类库) 这些类是微软 ...

  3. JavaScript 进阶(五)易混淆概念null vs undefined, == vs ===, string vs String

    先看一段代码 var foo = {} foo.a = null alert(foo.a == null)     //true alert(foo.a === undefined)  //false ...

  4. C#中一些易混淆概念总结

    C#中一些易混淆概念 这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框 ...

  5. a链接易混淆与form表单简易验证用法详解

    链接可以说遍布互联网,比如你想提供一个可以跳转到百度首页的链接给网友,那么代码如下: <a href="http://www.baidu.com">百度一下,你就知道& ...

  6. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  7. 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  8. 【C#小知识】C#中一些易混淆概念总结(五)---------继承 分类: C# 2014-02-06 22:05 1106人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  9. 【C#小知识】C#中一些易混淆概念总结(五)---------深入解析C#继承

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

随机推荐

  1. mongodb操作命令

    连接mongodb:(mongo命令打开的是一个javascript shell.所以js语法在这里面都行得通)mongo 192.168.18.xx:27088/ups -uusername -pp ...

  2. Thinking in Java——笔记(11)

    Holding Your Objects In general, your programs will always be creating new objects based on some cri ...

  3. AtomicBoolean运用

    AtomicBoolean运用 首先先看如下例子 private static class BarWorker implements Runnable { private static boolean ...

  4. JavaScript作用域和闭包

    在JavaScript中,作用域是执行代码的上下文.作用域有3种类型: 1.全局作用域 2.局部作用域---(又叫函数作用域) 3.eval作用域 var foo =0;//全局作用域console. ...

  5. JMeter学习-026-JMeter 分布式(远程)参数化测试实例

    以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...

  6. Java学习——HashMap

    遍历 Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map. ...

  7. linux查看进程启动时间

    1. ps axu 2. 精确查看 for pid in $(pgrep httpd); do echo -n "${pid} " ; ps -p ${pid} -o lstart ...

  8. R12.2.6 installation failed with - Unable to rename database

    报错信息: 日志信息:/data/ebsdb/VIS/12.1.0/appsutil/log/VIS_ebstest/12222150.log Phase 3 Rename Database Exec ...

  9. vue.js在windows本地下搭建环境和创建项目

    Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vu ...

  10. Java学习手记2——多线程

    一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...