zoukankan      html  css  js  c++  java
  • Javascript Step by Step

    基本数据类型

    简单数值类型: undefined, null, boolean, number和string,共有5种

    复合数据类型:object,array,function

    typeof操作符用来确定变量的基本数据类型,它只有六个可能的值:

    undefined,boolean,string,number,object和function

    也就是说,null和array经过typeof操作后得到的值为object

    需要注意以下几点:

    1. 这几个类型的首字母必须小写,如果大写则变为了javascript的内置对象。javascript的内置对象有String,Math,Array,Date,Event等。内置对象都有自己的方法和属性
    2. null的意思是对象是空的,undefined的意思是未声明,或者已经声明但没有赋值,或者函数无明确的返回值。在进行数值运算时,null会转变为0,undefined会转变为NaN。关键在于null并不很特殊,从某种程度上和其他的值完全一样。
    3. 所有object都有一些方法,如hasOwnProperty,isPrototypeOf,toString和valueOf

    双等号和三等号

        我觉得这是一个很头疼的问题。在英文里,双等号叫做equality,三等号叫做identity,它们的区别在于双等号要做类型转换,但是三等号直接进行比较。这么说感觉很简单,但是实际比较起来就不那么容易了。

        ===比较时,若要相等,首先两边类型必须相同。然后又几种情况:都是number同值,都是字符串每个位置字符相等,都是true或者false,都引用同一对象或function,都是null或者undefined。

        ==比较时,如果类型相等转入===比较。如果类型不等而满足如下情况,则也算相等。null和undefined比较,字符串和数字比较(字符串转化为数字后两边相等),true和1或者false和0比较,对象和数值或字符串比较(对象调用valueOf或toString后和另一边相等)。说着挺麻烦的,举个例子吧:

    true == 1       //true
    "2" == 2         //true
    false == undefined  // false
    false == null       // false
    null == undefined   // true
    ' 	
     ' == 0     // true
    0 == ""             //true
    var a = { x: 1, y: 2 };
    var b = { x: 1, y: 2 };
    a == b            // false
    a === b          //false

        总之一句话,尽量用三等号就行了,要不然会很头疼。

    原型链

        Javascript中的每一个function都有一个prototype属性,指向该function的原型对象。默认所有的原型对象都有constructor属性,它始终指向创建当前对象的构造函数。函数的prototype的constructor指向这个函数。

    function Person(name) {  
        this.name = name;  
    };  
    Person.prototype.getName = function() {  
        return this.name;  
    };  
    var p = new Person("Mike");
    p.constructor===Person //true,对象的constructor属性是创建它的构造函数
    Person.prototype.construtor==Person //true,函数的prototype属性的constructor属性是它自己  

    new Person的过程是这样的:

    1. 初始化一个空的对象,var p={}
    2. p.__proto__=Person.prototype
    3. Person.call(p)

    每个对象都有一个__proto__属性,它是一个私有属性,不对外公开,其实他就是构造它的函数的prototype属性。在寻找对象的属性时,首先找他自己的属性,没有的话向__proto__属性中找,如果还没有,就向__proto__.__proto__中去找,。。。这就是原型链。

    var Person=function(){};
    var Programmer=function(){};
    Programmer.prototype=new Person();
    var p=new Programmer();

    它们之间的关系是,var p1=new Person(), p1.__proto__=Person.prototype, p.__proto__=Programmer.prototype=p1,因此,p.__proto__.__proto=Person.prototype,done!

  • 相关阅读:
    Web项目中JSP页面的一种调试方法与出现的问题 -- SpringMVC架构测试
    Web项目中用模板Jsp页面引入所有静态样式脚本文件(js,css等)
    setInterval()、clearInterval()、setTimeout()和clearTimeout()js计数器方法
    另类的package-info.java文件探讨
    myeclipse10 如何把代码预览的窗口去掉
    phpMyAdmin中mysql的创建数据库时的编码的问题
    Jquery 中 $('obj').attr('checked',true)失效的几种解决方案
    监听<input/>标签行为的方法总结
    新花生壳+tomcat(内网映射,无需设置路由器)建站攻略
    Hibernate学习笔记(一):mycelipse建立项目流程(未完成)
  • 原文地址:https://www.cnblogs.com/cubika/p/3182803.html
Copyright © 2011-2022 走看看