#JavaScript学习#第三章:基本概念

226 阅读7分钟

Tips: 内容为知识梳理


目录

  1. 语法

  2. 关键字和保留字

  3. 变量

  4. 数据类型

  5. 操作符

  6. 语句

  7. 函数


1.语法

  1. 区分大小写

全部名字都区分大小写

  1. 标识符

第一个字符必须是一个字母、下划线(_)或一个美元符号($);其他字符可以是字母、下划线、美元符号或数字

  1. 注释
  • //是单行注释
  • /*是块级注释*/
  1. 严格模式

定义一种不同的解析和执行模型,在顶部加入use strict使整个脚本启用严格模式,在函数体中加入use strict使局部启用严格模式

  1. 语句

建议以分号结尾,采用c语言风格


2.关键字和保留字

不能用于标识符,以下是所有关键字和保留字:


3.变量

  • 用var定义一个变量,变量可以是任何类型,不用加以说明
  • 可以省略var 使之成为全局变量,但不推荐
  • 可以在一条语句定义多个变量,用逗号,分隔其中的变量

4.数据类型

ECAMScript有六种数据类型:Undefined、Null、Boolean、Number、String、Object。

4.1 typeof操作符

用于检测给定变量的数据类型。

  • undefined--值未定义
  • boolean--这个值是布尔值
  • string--这个值是字符串
  • number--这个值是数值
  • object--这个值是对象或null
  • function--这个值是函数

4.2 Undefined类型

未对变量初始化时其值为undefined

4.3 Null类型

Null类型表示一个空对象指针,若变量准备用于保存对象,最好初始化为null

4.4 Boolean类型

  • true和false
  • 转型函数Boolean(),输入true,任何非空字符串,非零数字,任何对象,则转换为true;输入false,空字符串,0或NaN,null,undefined则转换为false

4.5 Number类型

  • 八进制数第一位为0
  • 十六进制第一位为0x,后面字母不区分大小写
  • ECAMScript最小值:Number.MIN_VALUE=5e-324;最大值:Number.MAX_VALUE1.7976931348623157e+308。若超出这个值则转换成 Infinity 。
  • 使用NaN来替代未返回数值的情况,如0除0返回NaN,而不是抛出错误,任何涉及NaN的操作都返回NaN
  • Number(),parseInt(),parseFloat()用于数值转换,
    • Number()规则如下
    • true,false返回1和0
    • null返回0
    • undefined返回NaN
    • 对于字符串,数字则返回数字,十六进制则返回十进制数,空字符串返回0,有其他字符则返回NaN
    • 若是对象则调用valueOf和toString方法,在按照前面规则进行
    • parseInt()规则如下
    • 第一个非空格字符不是数字或者负号则返回NaN
    • 直到遇到非数字字符才会停止转换,小数点属于非数字字符
    • 可指定第二个参数,说明要转换成多少进制
    • parseFloat()规则如下
    • 遇到的第一个小数点有效,其余无效
    • 只解析十进制,十六进制数无效,始终忽略前导0

4.6 String类型

  • 用单引号或双引号表示
  • 改变字符串的值的过程是先创建一个新字符串,再填充新的值,再销毁原来字符串的值,这些步骤都发生在后台
  • 除了null和undefined类型无toString方法,其余类型都有这个方法,用于转换数据类型

4.7 Object类型

var o=new Object() 用于创建自定义对象 每个对象都具有几个相同的属性和方法,在这里不细说,如toString和valueOf。


5.操作符

操作符分为算术操作符、位操作符、关系操作符和相等操作符

5.1 一元操作符

只能操作一个对象

  • 递增递减操作符

与c语言中的类似,- -num为前置递减,将操作数的值减一,即num=num-1num++为后置递增,先执行其他语句再执行递增

  • 一元加减操作符

主要用于将数变成它的相反数

5.2 位操作符

对数的内存形式进行操作,即二进制形式。 负数以二进制补码储存

  1. ~按位非

将每位数取反,实质是求其负数再减1

  1. &按位与

有0则0,两个1才是1

  1. |按位或

有1则1,两个0才是0

  1. ^按位异或

两个值相等则返回0,不相等则返回1

  1. <<左移

不影响符号位

  1. >>有符号右移

右移时补充符号位的数,即不会更改符号位 7.>>>无符号右移 右移补0,且不区分正负数,即负数的二进制补码会被当成正数的二进制码来用。

5.3 布尔操作符

  1. !逻辑非

将操作数转换成布尔值再求反

  1. &&逻辑与

当两个操作数为true才返回true 若有操作数不是布尔值,则遵循以下规则:

  • 若第一个值为true才会继续求第二个值,若第一个值为false则不会去求第二个值
  • 若第一个操作数是对象则返回第二个操作数
  • 若第二个数是对象,当第一个为true才返回第二个
  • 若两个都为对象则返回第二个
  • 若有操作数为null或NaN或undefined,则直接返回null或NaN或undefined
  1. ||逻辑或

当两个数为false才返回false 若有一个操作数不是布尔值,则遵循以下规则:

  • 若第一个数是对象则返回第一个操作数
  • 当第一个值为false才会继续求第二个值,若第一个值为true则直接返回true不会再求第二个值
  • 若第一个值为false则返回第二个而操作数
  • 若两个都是对象则返回第一个操作数
  • 若两个操作数都是null或NaN或undefined则返回这三个数

5.4 乘性操作符

  1. *乘法

若有非数字,则先用number函数转换成数字

  1. /除法

与乘法类似

  1. %求模

与乘法类似

5.5 加性运算符

  1. +加法

若有一个数是字符串,则另一个数会被转换成字符串再与另一个字符串拼接

  1. -减法

若有操作数是字符串、布尔值、null、undefined、对象,则先转换成数字,再进行减法运算

5.6 关系运算符

  • 若比较数是数值则进行数值比较
  • 若比较数都是字符串,则比较两个数对应的字符编码值
  • 若其中一个是数值,则将另一个转换成数值再比较
  • 若是对象,则用valueOf或toString方法再按前面规则比较
  • 布尔值会转换成数值再比较

5.7 相等操作符

  1. 相等和不相等

=!=表示,遵循以下规则 + 布尔值先转换成数值再比较 + 若其中一个是字符串另一个是数值则字符串会转换成数值 + 若其中一个是对象另一个不是,则对象调用valueOf方法再比较

  1. 全等和不全等

===!==表示 + 不会进行类型转换

5.8 条件操作符

variable = boolean_expression ? true_value : false_value; 若boolean_expression值为true,则将true_value的值赋给variable,否则将false_value的值赋给variable

5.9 赋值操作符

  • =
  • *=
  • %=
  • /=
  • +=
  • -=
  • <<=
  • >>=
  • >>>=

与c语言类似

5.10 逗号操作符

var num=(5,1,4,8,0) num的值为0,逗号操作符会返回表达式最后一项


6.语句

其中的if、for、do-while、while、break、continue、switch与c语言类似

for-in语句

{statement} 
for (var propName in window) 
{      
	document.write(propName); 
}

用于枚举对象的所有属性,上面例子则打印了window对象的所有属性,具体步骤是先将属性值赋值给propName,再输出propName

label语句

在代码前添加标签

with语句

用于操作一个特定对象 with(object){statement}


7.函数

用function声明,具体为: function functionName(arg0, arg1,...,argN) { statements }

  • 不必定义返回值
  • 不介意传递多少参数,
  • 用隐性arguments对象来访问参数数组,即参数会存于这个数组中,可以直接在函数体中使用arguments对象来使用这些参数,不必声明参数
  • 不能进行重载,即不能定义两个名字相同的函数,若有,则执行后一个函数