您的位置:首页 > Web前端 > JavaScript

JS学习-常见问题

2013-11-28 21:56 169 查看

区分大小写

  JS中方法和变量都是区分大小写的,例如

    Function my(){}和function My(){}表示两个方法。

  JS的核心对象也是区分大小写的,例如Array和Object。

  自己使用过的语言中除了VB、VB.Net不区分外(自动转化),C++、C#、Java都区分大小写。

单引号、双引号

  JS中对单引号和双引号的使用没有特殊的区别,都可以用来创建字符串,但作为一般性规定,一般使用单引号,但是因为XHTML规范要求所有属性值都必须使用双引号括起来。这样在JS使用单引号,而对XHTML属性使用双引号会使混合混合两者代码更方便也更清晰。

  在JS中单引号中可以包含双引号,反之双引号也可以包含单引号,但是下面这种在JS中会报错:""b""会报错,需要""+"b"+""

下例:测试显示的temp和temp2的值

<script language="javascript"type="text/javascript">

/*var array =new Array();*/

var temp='aj"abc"';

var temp2="a'acb'";

function Init(){

alert(temp);

alert(temp2);

};

</script>

<body onload="Init();">

</body>

括号

  括号可以是分隔符也可可以是表达式

  分隔符大家都熟悉

   (1+3)*3等于12,优先运算括号中的内容

  表达式

   (function(){})();

   function之前的一对括号作为分隔符,后面的括号表示立即执行这个方法,如下例,不需要onload="Init();"进行调用

 例如:

<script language="javascript"type="text/javascript">

var temp='aj"abc"';

var temp2="a'acb'";

(function Init(){

alert(temp);

alert(temp2);

})();

</script>

函数调用和引用

   var foo=example();foo表示函数的返回值。

   var foo1=example;表示将函数的引用赋给一个值foo1。如:window.onload=example;

换行

   无论使用哪种引号创建字符串,字符串中间不能包含强制换行符。

   vartemp=’<h2 class=”a”>A list</h2>

<ol>

</ol>’;

  上面的代码将导致解析错误。想按上面的方式添加换行符则有两种方法

  1、通过\来转义换行符以告知浏览器改行是连续的:

   vartemp=’<h2 class=”a”>A list</h2>\

   <ol>\

   </ol>’;

  2、使用字符串连接符+

   Vartemp=’<h2 class=”a”>A list</h2>’+

   ‘<ol>’+

   ‘</ol>’;

重载

   JS中不支持重载,因此这里所说的重载其实更类似于替换,且在两个函数同名的情况下(和参数无关),下面的函数会覆盖掉上面的函数。

   例如:

   functionmyFunction(a){.....}

    function myFunction(a,b){.....}

  这样后一个方法将覆盖前一个,虽然不报错,但是JS中如何实现类似重载呢?使用arguments

arguments是JavaScript里的一个内置对象,包含了调用者传递的实际参数,但不局限于函数声明所定义的参数列表,而调用时只它和数组一样有个length属性。 

  我们暂且把它当“数组”来理解吧,我们根据该数组的长度以及其元素的类型来选择不同的实现,从而模拟了重载。 

  JS:

  functiongetDate(){

    if(arguments.length==0){

     var date=new Date().toLocaleDateString();

    return"您没有输入参数,现在时间:"+date ;

     }

     if(arguments.length==1){

       if(arguments[0].constructor ==Date){

      return "您输入的参数是Date类型,现在时间是:"+arguments[0].toDateString();

    }

    if(arguments[0].constructor ==String){

     return "您输入的参数是String类型,现在时间是:"+arguments[0];

    }

   }

 }

 调用如下:

  getDate()
  getDate(new Date())

  getDate("星期一")

作用域、闭包

  所谓作用域就是指对某一属性或方法具有访问权限的代码空间。变量的作用域无非就是两种:全局变量和局部变量。我们做项目过程中接触很多了。

  Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。

  例如:

  var n=91;

  functionmyFunction(){

   alert(n);

  }

  myFunction(); // 1

  另一方面,在函数外部自然无法读取函数内的局部变量。如下例

  FunctionmyFunction(){

   var temp=”abc”;

  }

  function myFunction(){

   var n=1;

  }

  alert(n); //error

  这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!

  闭包

  闭包是与作用域相关的一个概念,它指的是内部函数即使在外部函数执行完成并终止后仍然可以访问其外部函数的属性。

  简单点闭包就是能够读取其他函数内部变量的函数。

  由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

总结

  这里总结的JS常见问题其实就是JS入门需要注意的地方和一些基础,首先明白这些基础内容,层层递进,也能使以后更深一步的学习提供帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: