zoukankan      html  css  js  c++  java
  • JavaScript你所不知道的困惑(1)

    困惑一:

    先看一个例子:

    function test(){
    	message = "hi";
    }
    test();
    alert(message);
    会输出字符串“hi"

    在函数内部使用var定义的变量是局部变量,省略var操作符的变量是全局变量。

    困惑二:

    alert(undefined == null)
    结果是”true"

    我们知道在js中分为基本类型和引用类型,基本类型包括number、string、boolean、undefined、null.如果一个基本类型没有初始化则会是undefined类型,而null代表空指针。实际上undefined值是派生自null的,因此返回true.

    困惑三:

    alert(isNaN(NaN));   //true
    alert(isNaN(10));    //false
    alert(isNaN("10"));    //false  自动类型转换
    alert(isNaN("blue"));   //true
    alert(isNaN(true));    //false  自动类型转换
    NaN指非数值(Not a Number)是一个特殊的数值,在ECMAScript中,任何数值除以0返回NaN,而且任何涉及NaN的操作都会返回NaN. NaN与任何值不等,包括自身。

    alert(NaN == NaN);  // false 
    困惑四:

    for(var propName in window){
    	document.write(propName);
    }
    For - in 语句是一种精准的迭代语句,可以用来枚举对象的属性,类似于java中的for( String s : String[])

    困惑五:

    var qs = location.search.substring(1);
    var hostName = location.hostname;
    var url = location.href;
    
    //等价于下面
    
    with(location){
    	var qs = search.substring(1);
    	var hostName = hostname;
    	var url = href;
    }
    with语句的作用是将代码的作用域设置到一个特定的对象中,主要目的是为了简化多次编写同一个对象的工作。

    困惑六:

    function howManyArgs(){
    	alert(arguments.length);
    }
    
    howManyArgs("String", 45);  //2
    howManyArgs();  //0
    howManyArgs(12);   //1
    ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果没有参数的话)。

    命名的参数只提供便利,但不是必须的。再看下面例子

    function doAdd(num1, num2){
    	arguments[1] = 10;
    	alert(arguments[0] + num2);
    }
    因为arguments对象中的值会自动反映到对应的命名参数,所以num2会变成10,但是他们的内存空间是独立的(不是引用),另外arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数个数决定的。

    困惑七:

    for(var i=0; i<10; i++){
    	
    }
    alert(i);   //输出结果为 10
    JavaScript没有块级作用域。




  • 相关阅读:
    Windows Azure 网站 (WAWS) 中的服务器端包含 (SSI)
    Windows Azure 即将更名
    由世纪互联运营的 Windows Azure 现已在中国正式发布
    Windows Azure 存储的冗余存储选项和只读访问跨地域冗余存储
    Azure 网站的新增功能:可配置的环境变量
    cocos2dx中的其他层
    日期类型的特殊性 -- 日期函数转换
    now()与sysdate()的区别(1)
    定义变量时无引号,单引号,双引号区别与特点
    把一个命令的结果作为变量内容赋值方法
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468988.html
Copyright © 2011-2022 走看看