JavaScript学习笔记--语法

#JavaScript的基本概念 #

1.语法

(1)javascript是区分大小写的
(2)javascript标识符
标识符是指变量,函数,属性名字或者函数的参数。
(3)标识符的定义规则

  • 第一个字符必须是字母,下划线(_)或美元符号($)
  • 其他的字符可以是字母,下划线,美元符号或者数字
  • 该标识符也采用驼峰法则,第一个字母小写,其他的每个单词首字母大写,比如:selectNumberOfPeople
  • 不能把关键字,保留字,true,false,null等作为标识符
    (4)注释
    javascript中的注释有两种,分单行注释和块级注释,下面举例
    单行注释:快捷键(ctrl+/,一次是注释掉,两次是去掉注释)
    

多行注释:快捷键(ctrl+shift+/)

    /*
	 * document.write("

this is a heading

"); * document.write("

this is a paragraph

"); */

(5)严格模式

  • 严格模式是定义的一种不同的解析和执行模型,它可以使的一些不确定的行为得到处理,不安全的操作抛出错误。
  • 如果要在整个脚本中使用,需要在脚本的顶部添加"use strict"这行命令,他其实相当于一种编译的指令。
  • 如果在某个函数内的顶部添加"use strict",那么这个函数在执行的时候,会采用严格模式。
  • 他的作用就是通知支持javascript引擎的浏览器切换到严格模式来执行该脚本。
    (6)语句
    在javascript中使用分号来当做改语句的结束,也可以不用加分号,但是一般推荐使用分号结束,因为可以避免很多不必要的麻烦。
    (7)关键字和保留字
    javascript中的关键字和保留字不可以当做标识符

2.变量

(1)javascript变量属于松散类型,松散类型就是可以用来保存任何的数据类型,也就是说每个变量就是一个保存值的占位符。
(2)定义变量时需要使用关键字var,后面加变量名字就可以,比如:
var hello;//定义了一个名为hello的变量,它可以用来保存任何值
(3)如上面的例子,该变量没有经过初始化,它会保存一个特殊值(undefined),其实javascript也支持直接初始化变量,因此在定义变量的时候就可以设置变量的值。
var hello=“javascript”;//定义一个名为hello的变量内容初始化为javascript
(4)使用var定义变量将成为定义该变量的作用域中的局部变量,比如当在一个函数中使用var定义了一个变量,那么这个变量在函数退出后就会被销毁。
(5)定义变量的时候如果省略var操作符,那么这个变量就是全局变量,在任何地方都可以被使用。但是不推荐这么使用,因为在局部作用域中定义的全局变量很难维护,而且如果给未经声明的变量赋值在严格模式下回导致抛出referenceError错误。
(6)可以使用一条语句定义多个变量,每个变量之间使用逗号分隔就可以。
(7)在严格模式下,不能定义名为eval或者arguments的变量,否则会导致语法错误

3.数据类型

(1)ECMAScript中有5中简单数据类型,分别是Undefied,Null,Boolean,Number和String。还有一种是Object,Object本质是由一组无序的名值对组成,ECMAScript不支持任何创建自定义类型的机制。ECMAScript数据类型具有动态性。
(2)typeof操作符

  • 用来检测给定变量的数据类型
  • 对一个值使用typeof操作符可能返回下列某个字符串
  • undefined(如果这个值没有定义)
  • boolean(如果这个值是布尔值)
  • string(如果这个值是字符串)
  • number(如果这个值是数值)
  • object(如果这个值是对象或null)
  • function(如果这个值是函数)
  • typeof操作符的操作数可以是变量,也可以是数值字面量
    (3)undefined类型
    undefined类型只有一个值,特殊的undefined,在使用var声明变量但是没有初始化时,这个变量的值就是undefined。
    (4)Null类型
  • Null类型是第二个只有一个值得数据类型,特殊值为null,从逻辑的角度来说,null值表示一个空对象指针。
  • 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值,这样只需要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
  • undefined值是派生于null的,所以alert(null==undefined);//true
  • 如果保存对象的变量没有真正保存对象,就应该明确的让该变量保存Null值。
    (5)boolean类型
  • boolean类型只有两个值true和false
  • 任何的数据类型都可以转换为boolean类型,只需要调用转型函数Boolean()就可以,然后会返回一个Boolean值。
  • 各种数据类型及其对应的转换规则:
  • Boolean类型转为true的值为true,转为false的值为false
  • String类型转为true的值为任何非空字符串,转为false的值为""(空字符串)
  • Number类型转为true的值为任何非零数字值(包括无穷大),转为false的值0和NaN
  • Object类型转为true的值为任何对象,转为false的值为null
  • Undefined类型转为true的值为不适用,转为false的值为undefined
    (6)Number类型
  • 采用了IEEE754格式来表示整数和浮点数。(关于IEE754标准的解释 https://en.wikipedia.org/wiki/IEEE_floating_point )
  • 最基本的数值字面量格式是十进制,此外还有八进制,十六进制的字面值来表示。
  • 八进制字面值第一位必须是零0,后面是八进制数字序列0-7,如果字面值中的数值超过了范围,前导0会被忽略,后面的数值会被当做十进制进行解析。
  • 八进制字面量在严格模式下是无效的,汇导致支持的javascript引擎出现错误。
  • 十六进制前两位必须是0x,后面加任何十六进制数字0-9,a-f,其中字母大小写随便。
  • 进行算数计算时,所有以八进制和十六进制表示的数值都会转为十进制数值。
  • javascript中可以保存+0和-0,但是被认为是相等的。
  • 浮点数类型:
  • 浮点数值必须包含一个小数点,小数点后面必须至少有一个数字。保存浮点数需要的内存空间是保存整数的两倍,如果小数点后面没有任何数字,那么这个数值就可以当做整数来保存,如果浮点数本身就是整数(10.0),那么保存的时候会把他转为整数保存。当浮点数的值极大或者极小时,可以采用科学技术进行保存,
  • 浮点数值的最高精度是17位,进行算数计算时精度<<整数
  • 当数值是无穷大或者无穷小时不可以参与计算的数值,可以使用isFinite()函数来判断,这个函数在参数位于最大值和最小值之间时会返回true.,其余的会返回false
  • NaN(not a number)表示非数值,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。有两个特点,任何与NaN的操作都会返回NaN,其次任何的值都与NaN不相等。isNaN()函数可以接受一个任何类型参数,任何不能被转换为数值的值都会使得这个函数返回true。
  • isNaN()函数,也是适用于对象的,基于对象调用isNaN(),先调用valueOf()函数,看能不能转为数值,如果不可以就调用toString()方法。
  • 有三个函数可以将非数值转为数值,Number(),parseInt(),parseFloat(),Number()函数可以接受一切,后面两个函数只可以把字符串转化为int和float值
  • Number()函数转化规则:传入Boolean值,true(1),false(0);数字值,简单传入和返回;null值,返回0;undefined值,返回NaN;传入字符串,如果只包含数字,则转化为十进制数值(前导有0的会被忽略掉),如果是浮点型,转为浮点型,如果是空串,则返回0,如果是十六进制,转为十进制数值,其他类型的全部转为NaN;如果传入的是对象,则调用对象的valueOf()方法,然后依照前面规则转换返回的值,如果转换结果为NaN,则调用对象toString()方法,再按照前面规则进行转换。
    (7)String类型
  • String类型是由0个或多个16位unicode字符组成的字符序列,也就是字符串。字符串可以用双引号,也可以用单引号,但必须统一,如果以双引号开头必须以双引号结尾,单引号也是这个道理。在javascript中单引号和双引号的效果一样。
  • 转义字符,用于表示非打印字符。
  • 任何字符串长度都可以通过length属性获得。
  • 字符串是不可变的,一旦被创建,他的值是不能被改变的。
  • 转换为字符串的函数:toString()方法和
  • toString()就是返回相应的值得字符串表现,数值,布尔,对象,字符串值都有toString(),但是null和undefined值没有toString()方法。调用数值的toString()可以传递参数,表示以多少进制数,其他的基本不用传参数。
  • 在不知道要转化的值是不是null或undefined的情况下,使用String()转型函数,它可以把任何类型的值转换为字符串,转换规则如下:如果值有toString()方法,则调用改方法并返回结果;如果值为null,则返回"null",如果值是undefined,则返回"undefined"
    (8)Object类型
  • 对象可以通过执行new操作符跟创建的对象类型的名称来创建。
  • object类型具有的任何属性和方法也同样存在于更具体的对象中。
  • Constructor:保存用于创建当前对象的函数
  • hasOwnProperty(propertyname):用于检查给定的属性在当前对象实例中是否存在。其中name必须以字符串的形式指定。
  • isPrototypeOf(object):用于检查传入对象是否是另一个对象的原型
  • toLocaleString():返回对象的字符串表示,该字符串和执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串,数值或者布尔值表示,通常和toString()方法返回值相同。
    4.操作符
    (1)一族用于操作数值的操作符,包括算数操作符,位操作符,关系操作符和相等操作符。
    (2)一元操作符:只可以操作一个值得操作符,自增和自减,一元加和减操作符
    自增和自减操作符使用规则:
  • 一个包含有效数字的字符串时,先将其转换成数字值,再执行加减1操作。字符串变量变成数值变量
  • 一个不包含有效数字的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。
  • 用于false时,转为0在执行加减1操作
  • 用于true,转为1再执行加减操作
  • 用于浮点数,执行加减1操作
  • 应用于对象,先调用对象的valueOf()方法取得一个可以操作的值,再对值进行前面的规则操作,如果结果是NaN,则调用toString()后再应用前面的规则。
    (3)位操作符
  • 按内存中表示数值的位来操作数值。
  • javascript是先将64位的值转换成32位的整数,然后执行操作,最后将结果转回64位的值。
  • 正数以二进制的形式存储,负数也一样
  • 负数同样是用二进制存储,唯一区别就是负数是使用二进制补码的格式进行存储:求该数值绝对值的二进制码;求二进制的反码;得到的二进制码加1;得到负数的二进制码
  • 其中NaN和Infinity值应用位操作时,这两个值会被当做0来处理。
  • 对于非数值的位操作符,会先使用Number()将其转化为一个数值,然后再对其进行操作。
  • 按位非(~),执行结果是返回数值的反码
  • 按位与(&),只有当第一个和第二个数值的位都是1,结果才是1,其余结果都是0
  • 按位或(OR),只有当第一个和第二个数值的位都是0时,返回的按位或结果才是0,其余都是1
  • 按位异或(XOR),只有当两个数值对应位上的数字相同时才为0,数值不同时为1
  • 左移(<<),将数值所有的位向左移动指定的位数。数值会变为2^n次幂,左移不会影响操作符的符号位。
  • 有符号的右移(>>),会将数值向右移动,但是保留符号位,给原来的值除以2^n次幂
  • 无符号的右移(>>>),将数值的所有32位都向右移动,对于负数来说结果是不和有符号右移一致的
  • 布尔操作符:非,与,或
  • 逻辑非(!):逻辑非操作符首先会将它的操作数转换为一个布尔值。然后再对其进行求反。
    操作数是一个对象时,返回false;
    操作数是一个空字符串时,返回true;
    操作数是一个非空字符串,返回false;
    操作数是数值0,返回true;
    操作数是任意非0数值,返回false;
    操作数是null,返回true;
    操作数是NaN,返回true;
    操作数是undefined,返回true
  • 逻辑与(&&)
  • 只有当两个操作数都为true时,结果才为true.
  • 如果第一个操作数是对象,则返回第二个操作数
  • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true时才会返回该对象
  • 如果两个都是对象,则返回第二个操作数
  • 如果有一个操作数是Null,则返回null;
  • 如果有一个是nan,则返回NaN
  • 如果有一个是undefined,则返回undefined
  • 逻辑与属于短路操作,如果第一个操作数可以决定结果,则不会对第二个操作数进行运算。
  • 逻辑或(||)
  • 逻辑或只有当两个操作数全为false时,最终结果才是false,否则其他情况,操作数结果都是true.
  • 如果第一个操作数的求值结果是false,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是null,则返回null,如果两个操作数都是NaN,则返回NaN,
  • 如果两个操作数都是undefined,则返回undefined.
  • 乘法操作符(*)
  • 用于计算两个数值的乘积
  • 如果操作数都是数值,那么按照常规进行乘法计算
  • 如果有一个操作数是NaN,则结果是NaN
  • 如果是Infinity与0相乘,则结果是NaN
  • 如果Infinity与非0相乘,结果是Infinity或-Infinity,取决于有符号操作数的符号。
  • 如果是infinity与infinity相乘,结果是infinity
  • 如果有一个操作数不是数值,则在后台调用Number()将其转为数值,然后再使用上面规则
  • 除法操作符(/)
  • 执行第二个操作数除第一个操作数
  • 如果操作数都是数值,那么按照常规进行除法计算
  • 如果有一个操作数是NaN,则结果是NaN
  • 如果是infinity被infinity除,结果是NaN
  • 如果是零被零除,结果是NaN
  • 如果是非0的有限数被零除,结果是infinity或-infinity,取决于有符号操作符
  • 如果是infinity被任何其他非零数值除,结果是Infinity或-infinity,取决于有符号操作数的符号
  • 如果有一个操作数不是数值,后台调用Number()将其转为数值,然后应用上面规则
    JavaScript学习笔记--语法_第1张图片

你可能感兴趣的:(前端)