• JS基本概念 Amy


    一、语法

      1.1 区分大小写

      1.2 标示符第一个字符必须是字母,下划线或者$,其他字符可以是数字,字母,下划线以及$

      1.3 单行注释//,多行注释/**/

      1.4 语句结尾尽量加上分号,因为代码压缩的时候,可能会因为语句结尾没有分号而出错

    二、变量

      2.1 ECMAScript的变量是松散型的,即可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符而已,使用var来定义变量

      2.2 如果使用var操作符来定义变量,那么这个变量就成为定义该变量的作用域中的局部变量,如果不使用var操作符的变量则是全局变量

    三、数据类型

      3.1 ECMAScript有5种简单数据类型,一种复杂数据类型

      3.2 简单数据类型有Undefined、Null、Boolean、Number、String,复杂数据类型为Object,Object是由一组无序的名值对组成

      3.3 typeof操作符:由于ECMAScript是松散型的语言,因此需要一种手段来检测给定变量的数据类型,typeof操作符返回的字符串如下

        3.3.1 "undefined":该变量没有定义

        3.3.2 "boolean":该变量是布尔值

        3.3.3 "string":该变量是字符串

        3.3.4 "number":该变量是数值

        3.3.5 "object":该变量是对象或者null

        3.3.6 "function":该变量是函数

    var m;
    alert(typeof m);//undefined
    m=true;
    alert(typeof m);//boolean
    m="true";
    alert(typeof m);//string
    m=1;
    alert(typeof m);//number
    m=new Object();
    alert(typeof m);//object
    m=function(){};
    alert(typeof m);//function

      3.4 Undefined类型只有一个值就是undefined,只有在使用var操作符声明变量但未对其初始化时,该变量的值才为undefined

        3.4.1 注意没有定义和没有初始化的区别

    alert(typeof age);//undefined
    alert(age);//

      3.5 Null类型只有一个值就是null,表示一个空对象指针,定义该值的变量是准备保存对象的变量,在保存变量以前初始化为null

        3.5.1 undefined派生自null值,因此undefined==null;//true

        3.5.2 由于定义为null值的变量是准备保存object的,因此利用typeof操作符检索该变量,返回值为object

      3.6 Boolean类型只有两个值true和false

        3.6.1 所有类型的值都有与true和false相等价的值,转换的时候使用转型函数Boolean()

    数据类型 可以转换为true的值 可以转换为false的值
    Boolean true false
    String 任何非空的字符串 ""(空字符串)
    Number 任何非0的数字 0和NaN
    Object 任何对象 null
    Undefined   undefined

      3.7 Number类型使用IEEE754表示整数和浮点数

        3.7.1 八进制第一位必须是0,后面的数字必须是0到7之间的,如果超过就被当做十进制的数值来解析

        3.7.2 十六进制头两位是0x,后面是0-9和a到f,可以大小写混用

        3.7.3 浮点数:必须包含小数点,小数点后至少有一位数字,由于浮点数所需内存空间是整数的两倍,所以如果小数点后没有数字会被当做整数,同样,

          3.7.3.1 如果该浮点数本身就是一个整数,例如1.0,那么该值也被当做整数

          3.7.3.2 对于极大极小的数,利用科学计数法表示,默认ECMAScript遇到小数点后面有6位以上的浮点数,就转换为科学计数法

          3.7.3.3 浮点数的最高精度是17位,但是计算时远远不如整数,因此永远不要测试某个特定的浮点数alert(0.1+0.2);//0.30000000000000004

          3.7.3.4 最大值与最小值Number.MIN_VALUE和Number.MAX_VALUE超过最大值和最小值表示为正负无穷大Infinity和-Infinity

          3.7.3.5 判断一个数值是否位于最大值和最小值之间的函数isFinite()

        3.7.4 NaN是一个特殊的数值,表示一个本来要返回数值的操作未返回数值的情况,例如4/0,,

          3.7.4.1 任何与NaN有关的操作都返回NaN

          3.7.4.2 NaN与任何值都不相等,包括其自身

          3.7.4.3 判断某一变量是否”不是数值“的函数isNaN()

        3.7.5 数值转换的三个函数Number()可用于任何数据类型,parseInt()parseFloat()专门用于字符串转换成数值

          3.7.5.1 Number()的转换规则

            3.7.5.1.1 如果是Boolean的true和false转换为1和0

            3.7.5.2 如果是数值就直接返回

            3.7.5.3 如果是null,返回0

            3.7.5.4 如果是undefined,返回NaN

            3.7.5.5 如果是字符串,忽略掉字符串前面的0,转换成十进制,如果开头有ox,则转化成与十六进制大小相等的十进制数值,如果为"",转换为0,如果包含其他字符转换为NaN

         3.7.6 parseInt()的转换规则

          3.7.6.1 只针对字符串,

          3.7.6.2 会找到第一个非空格的字符,如果该字符不是数字以及符号,就返回NaN,空字符串也是NaN,直到解析到非数字字符为止

          3.7.6.3 如果开头的非空字符为0或者ox时,则字符串会被当做八进制或者十六进制进行解析,解析后返回的都是与其相等的十进制的数

          3.7.6.4 可以指定第二个参数为8或者16,那么该字符串会被当做八进制或者十六进制进行解析,解析结果返回的仍然是与之相等的十进制的数

        3.7.7 parseFloat()的转换规则:从第一个非空的字符开始,直到遇到一个无效的浮点数字字符为止,只解析十进制值,因此没有第二个参数,ox开头的字符返回0

      3.8 String类型:用于表示由0个或者多个Unicode字符组成的字符序列,可以用双引号或者单引号表示,没有区别

        3.8.1 length属性:返回字符串中16位字符的数目

        3.8.2 ECMAScript中的字符串是不可变的,即一旦字符串创建,它们的值是不可改变的,要改变某个变量保存的字符串,首先用包含新值的字符串填充该变量,然后销毁原来的字符串

        3.8.3 针对3.8.2的例子

    var lang="java";
    lang=lang+"script";
    //进行这步操作:首先创建一个可以容纳10个字符的新字符串,然后用"java"和"script"进行填充,填充完后,销毁字符串"java"和"script"

        3.8.4 转换为字符串的方法:toString()方法String()函数

        3.8.5 除了null和undefined外每个值都有的toString()方法,该方法会返回相应值的字符串表现

        3.8.6 toString()方法:数值调用的该方法可以传递参数:输出数值的基数,返回用参数进制表示的数值的字符串形式

        3.8.7 String()函数:由于null和undefined没有toString()方法,因此只能用String()函数

      3.9 Object类型:是一组数据和功能的集合,是所有它的实例的基础,因此它具有的任何属性和方法也都存在于更具体的对象中

        3.9.1 constructor属性:该属性保存了用于创建当前对象的函数,即当前对象的构造函数,object类型的构造函数就是Object()

        3.9.2 hasOwnProperty(属性名)方法:用于检查给定的属性是否存在于当前对象的实例中,而不是实例的原型中

        3.9.3 isPrototypeOf(对象)方法:用于检查传入的对象是否是调用该方法对象的原型

        3.9.4 propertyIsEnumerable(属性名)方法:用于检查给定属性是否可以使用for-in语句进行枚举

        3.9.5 toString()方法:返回对象的字符串表示

        3.9.6 valueOf()方法:返回对象的字符串、数值或者布尔值的表示

    四、操作符

      4.1 位操作符:用于最基本的层次上,按内存中表示数值的位来操作数值

        4.1.1 位操作只针对32位的整数:ECMAScript中数值都是以64位格式存储,但按位操作并不直接操作64位,而是先将64位转换成32位的整数,然后执行操作,操作完毕后再转回64位

        4.1.2 对于有符号的整数,前31位表示整数的数值,第32位表示数值的符号,0为正,1为负,成为符号位

        4.1.3 负数:使用二进制补码进行存储,第一绝对值的二进制,第二,取反,0->1,1->0,第三,加1

        4.1.4 计算-18的二进制表示:18=(10010)2;取反 (111...01101)2;加1 (111...01110)2

        4.1.5 我们看到的负数的二进制为:负数的绝对值的二进制码前面加上符号

    var lang=-18;
    alert(lang.toString(2));//-10010

        4.1.6 按位非(NOT)~:取反,实质:对数值的负数减1

        4.1.7 按位与(AND)&:只有都是1时菜返回1,

        4.1.8 按位或(OR)|:只要有一个是1就返回1

        4.1.9 按位异或(XOR)^:只有一个1时才返回1

        4.1.10 左移(<<移的位数):除了符号位全部向左移动,左移不影响符号位,右侧空出来的位用0填充

        4.1.11 有符号右移(>>):除了符号位全部右移,用符号位填充左侧空出来的位

        4.1.12 无符号的右移(>>>):包括符号位全部右移,0填充空白位

      4.2 布尔操作符:逻辑非!,逻辑与&&,逻辑或||

      4.3 乘法操作符:Infinity*0==NaN,Infinity*正数(包括Infinity)=Infinity,Infinity*负数(包括-Infinity)==-Infinity

      4.4 除法操作符:Infinity/Infinity=NaN

      4.5 加法操作符:-Infinity+Infinity=NaN;如果一个操作数是字符串,则是拼接字符串,例如"8"+4="84"

      4.6 减法操作符:Infinity-Infinity=NaN

      4.7 关系操作符:

        4.7.1 如果一个是数值一个是字符串,则字符串会转换成数值进行比较;

        4.7.2 如果两个都是字符串会依据字符编码进行比较,例如"23"<"3";//true

        4.7.3 任何操作数和NaN比较都是false

      4.8 相等操作符(==):先强制转换,然后再比较

        4.8.1 null==undefined

        4.8.2 NaN不等于任何值,包括其自身

        4.8.3 "5"==5

        4.8.3 全等操作符(===):两个操作数不经转换就相等"5"!==5

      4.9 逗号操作符:在用于赋值时,逗号操作符总会返回表达式中的最后一项

    var lang=(-18,2);
    alert(lang);//2

       4.10 for-in语句:一种精确的迭代语句,可以用来枚举对象的属性

    for(var name in window){//利用for-in来显示BOM中window对象的所有属性
        document.write(name+"<br/>");
    }

       4.11 label语句:定义的标签可以在将来由break或者continue语句引用,一般都与for语句等循环语句配合使用

      4.12 break语句:立即退出循环,强制继续执行循环后面的语句,continue:立即退出循环,从循环顶部继续执行

      4.13 with语句:将代码的作用域设定到一个特定的对象中

    with(location){
        document.write(hostname+"<br/>");//原本应该是location.hostname
        document.write(href+"<br/>");//原本应该是location.href
    }

     五、函数

      5.1 函数不必指定是否返回值,只要return语句后跟要返回的值即可实现返回值

      5.2 函数在执行到return语句后悔立即停止并退出,return后面的代码永远不会得到执行

      5.3 return语句不带任何返回值时,会返回undefined值,这种做法一般用在需要提前停止函数执行而又不需要返回值的情况

      5.4 ECMAScript函数不介意传递进来参数个数以及类型,因为ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,至于数组中包含的内容并不关心

      5.5 可以使用arguments对象来访问参数数组,arguments[i]来访问第i+1个参数,arguments.length确定传递进来的参数的个数

      5.6 没有传递值的命名参数将被自动赋值undefined

      5.7 ECMAScript中所有的参数都是值传递,没有引用传递

      5.8 如果出现两个相同名字的函数,后者会覆盖前者

  • 相关阅读:
    [1] Tornado Todo Day0
    [0] Tornado Todo 开篇
    RNSS和RDSS
    国密随机数检测--2/15 块内频数检测
    国密随机数检测--1/15 单比特频数检测
    FPGA实用通信协议之IIC
    压缩感知(十)
    压缩感知(九)
    压缩感知(八)
    压缩感知(七)
  • 原文地址:https://www.cnblogs.com/amy2011/p/3089355.html
Copyright © 2020-2023  润新知