JavaScript基础知识

1、格式
  JavaScript脚本位于<script>标签中,<script>标签可以置于<head>标签或者<body>标签中,甚至可以置于文档底部(这样不影响页面代码);JavaScript包含一般语句和函数。
2、输出方式(调试)
  alert()方法可以弹出警告框、document.write()方法直接输出到页面、innerHTML写到HTML元素中、console窗口调试。
3、数据类型
  字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、对象(Object)、空(Null)、未定义(Undifined)
  JavaScript拥有动态类型,相同的变量可以用作不同的类型。
可以使用typeof操作符来检测变量的数据类型:
  一般的数据类型有string、number、boolean、object;

  数组是一种特殊的对象,所以typeof [1,2,3,4]返回的是object;

  Null是空对象引用,所以用typeof检测Null返回的是object;

  用typeof检测undefined返回的是undefined;

  特别注意,Null和undefined的值是相等的,但是类型不同。
类型转换:
  上述的数据类型都可以使用一定的方法转换为另外的数据类型。
4、语法
  基本语法与java类似,其中的不同点有:
  (1)变量声明使用var
  例如:var a = 10;
  特别注意,可以使用var声明声明过的变量名,变量的值取最近一次有赋值的声明的值。
  例如:

var a = 10;    var a; //此时a的值为10
var a = 10;    var a = "ten"; //此时a的值为字符串"ten"

  (2)对象表示方式:

var person = {
      name:"hex", 
      age:23,
      home:"CQ",
      sing:function () {
        return "no voice";
      }
    };

  通常认为JavaScript中的对象是键值对的容器,与Java中的Map类似。
  (3)对象的访问方式
  访问属性:person.name; 或者person["name"];
  访问方法:person.sing();
  (4)函数声明方式:
    

    function myFunction(a, b) {
      //do someting
    }

  (5)命名习惯采用驼峰命名法,变量命名需以字母开头,或者$或者_开头,习惯性以字母开头。
5、作用域
  与Java类似,函数内通过var声明的是局部变量,函数外通过var声明的是全局变量,函数内使用没有声明过的变量(严格模式use strict下不允许使用没有声明过的变量),该变量自动变成全局变量。函数运行结束后,局部变量被删除;页面关闭后,全局变量被删除。
6、HTML DOM事件
  HTML DOM事件允许JavaScript根据不同的事件注册不同的处理程序,也即是规定当发生了某些事件时,程序可以做一些事情。
  例如:
  <button type="button" onclick="alert('just a test!')">测试</buttom>
  当点击测试按钮时,页面会弹出警告框"just a test!"
  类似的事件还有:鼠标事件、键盘事件、框架/对象事件、表单事件等。
7、正则表达式
  (1)正则表达式的模式与java类似,使用格式为:/hello/i,其中//是固定格式,hello表示匹配的内容,i是修饰符,表示不区分大小写(还有其他修饰符);
  (2)RegExp对象:RegExp对象是一个预定义的了属性和方法的正则表达式对象,可以声明一个RegExp对象,调用test()方法判断字符串中是否有匹配项,或者exec()方法查找字符串中的匹配项;
  例:语句/he[abcl]l/i.test("hello,world!") 结果true
  语句/he[abcl]l/i.test("hello,world!") 结果hell
  注意:当字符串中有多个匹配项时,返回最先匹配到的子串
8、错误与调试
  (1)try catch错误处理:语法与java语言类似,不同点在于throw抛出异常时,可以抛出一些自定义的异常,而这些异常可以是JavaScript的字符串、数字、逻辑值和对象。
  (2)调试:大多数浏览器都内置了调试程序(console),F12可以打开console窗口;在script中添加debugger可以设置断点。
9、this关键字
  this代表着函数运行时自动生成的一个内部对象,只能在函数内部使用。随着函数的使用场合的不同,this的值也会有所变化。但是,this始终指向调用函数的对象。
  例子1:    

    function myFunction() {
      return this;
    }
    myFunction();

  此时返回的是windows对象,此时函数的调用是全局的,所以事实上调用它的对 象就是windows。

  例子2:    

    var person = {
      name:"hex",
      age:23,
      object:function () {
        return this;
      }
    };
    person.object();

  此时返回的是:Object {name: "hex", age: 23}。此时函数的调用者是person,所以返回值就是person对象。

10、计数器困境与函数的自我调用
  我们在写计数器时,需要实现计数器的初始化和自增。我们希望的是初始化时只需要调用某一个方法,自增时也只需要调用某一个方法,而不采用直接修改变量的方式。那么,count变量应该声明为全局变量还是局部变量呢?声明为全局变量时,可以通过直接修改变量的方式改变计数器的值,声明为局部变量时,我们需要把count变量初始化和自增放在一个方法中,比如:  

  function myCounter(){
    var count = 0;
    function add() {
      count++;
    }
    add();
  }

  但是,这样在myCounter函数外部就不能够调用add方法。函数的自我调用可以解决这个问题。采用函数的自我调用可以这样写:  

  var add = (function () {
    var counter = 0;
    return function () {
      counter++;
    }
  }) ();

  这样,在需要计数时,我们调用add()就可以实现计数。事实上,add变量是一个counter的自增函数,这个函数可以使用counter变量。此时,function的声明是一个表达式,只会执行一次,所以counter初始化也只会执行一次。

 

posted @ 2017-07-06 17:29  buaa小松  阅读(157)  评论(0编辑  收藏  举报