• JavaScript学习总结(一)


    JavaScript语言特性

      Javascript是一门动态的、弱类型的、基于原型的脚本语言。在Javascript中“一切皆对象”,在这一方面,它比其他的面向对象语言来得更为彻底。即使作为代码本身载体的函数(function),也是对象,数据与代码的界限在Javascript中已经相当模糊。虽然它被广泛应用在Web客户端,但是其应用范围远远未局限于此。

      动态性

        动态性是指:在一个javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可。

      弱类型

        与Java、C/C++不同,Javascript是弱类型的,它的数据类型无需再声明时指定,解释器会根据上下文对变量进行实例化。

        在Javascript中,类型是和值相关联的,而不是变量和值关联。弱类型语言有很强的灵活性,在定义变量时无须显示声明。不过弱类型语言也有其不利的一方面,比如在开发面向对象的Javascript的时候,没有类型的判断往往会很麻烦,不过我们可以通过别的途径来解决此问题。

    `

    1 var array = [1,2,3,4,5];
    2 array.map(function(item){
    3     console.log(item*2);
    4 });

      运行结果为:2,4,6,8,10

      数组array中有五个元素,每个元素是一个数字。数组的map方法会接收一个匿名函数,这样对于数组中的每一个元素,都会调用这个匿名函数,最后把结果放入结果数组。

    基本概念

      数据类型

        在javascript中,包含了六种数据类型、字符串、数值、布尔值、undefined、null、及对象(object)。其中除了对象为引用类型其它为值类型,这些类型分别在内存中占有固定大小的空间,它们的值保存在栈空间中,我们可以按值访问。

    (1)值类型:数值、布尔值、null、undefined。
    (2)引用类型:对象、数组、函数。

        如果赋值的是引用类型的值,那么要在堆内存中为这个值分配空间。由于这种值得大小不固定(对象有很多的属性),故我们通过对其引用的访问来访问它们本身,引用本身就是一个地址,即指向真实存储复杂对象的位置(引用(也就是指针)保存在栈空间中,而其真实存在于堆内存中)。

      基本类型与对象之间的转换

        类似于JAVA中基本数据类型的自动装箱拆箱,Javascript也有相应的动作,基本数据类型在做一些运算时,会临时包装一个对象,做完运算后,又自动释放该对象。

    1 var str = 'javascript Kernal';
    2 alert(str.length);//打印17
    3 alert(typeof str);//打印String
    4 
    5 var str2=new String('javascript Kernal');
    6 alert('typeof str2);//打印Object

      两次的typeof操作结果来看,这两者并不相同,那么为什么可以使用str.length来得到str的长度呢?事实上,当使用str.length时,js会自动包装一个临时的string对象,内容为str的内容,然后获取该对象的length属性,最后再释放这个临时对象。

      对象转换为基本数据类型

        对象转换为基本数据类型的方式:通过调用对象的valueOf()方法来得到对象的值,如果和上下文类型匹配,则使用该值。如果valueOf()取不到的话,则需要调用toString()方法,而如果上下文为数值型,则又需要将此字符串转换为数值。由于js是弱类型的,所以js引擎要根据上下文来“猜测”对象的类型,这就使得js的效率要比编译型的语言要差一些。valueOf()的优先级要高于toString().

        valueOf()的作用是:将一个对象的值转换成一种合乎上下文需求的基本类型,toString()则名副其实,可以打印出对象对应的字符串。

      类型的判断

        js是一个弱类型的语言,但是有时候我们需要知道变量/参数在运行时的类型,就要做类型判断。

    function handleMessage(message,handle){
            if(typeof handle == "function"){
                return handle(message);
                }else
                {
                   throw new Error("the 2nd argument should be a function");
                 }
    }

        如上例,一个函数接收的参数为函数类型的判断,若不做类型判断,js引擎就会报错。

        但是,typeof不是总是有效的,比如下面这种情况:

    var obj = {};
    var array = ["one","two","three"];
    alert(typeof obj);//Object
    alert(typeof  array);//Object

      对象obj和数组array返回的typeof值都为‘object’,这样我们就无法准确判断了,这时候通过调用instanceof来进一步判断。

    alert(obj instanceof Array);//false
    alert(array instanceof Array);//true

      变量

        变量,是对值得存储空间的引用,通过一个名字将一个值关联起来,以后通过这个名字就可以引用该值。

      变量的作用域

        变量被定义的区域即作用域,全局变量具有全局作用域,局部变量具有局部作用域,比如在函数内部声明的变量为局部变量,在函数外部是无法访问局部变量的。

        

     

  • 相关阅读:
    BUAA OO Unit1 表达式求导
    中介者模式
    命令模式
    观察者模式
    解释器模式
    策略模式
    迭代器模式
    模板方法模式
    代理模式
    桥接模式
  • 原文地址:https://www.cnblogs.com/JoyXianFighting/p/5827371.html
Copyright © 2020-2023  润新知