您当前的位置:首页 > 计算机 > 编程开发 > JavaScript

JavaScript 基本概念

时间:12-14来源:作者:点击数:

JavaScript 的类型可以分为原始类型和对象类型,也可分为可以拥有方法的类型和不能拥有方法的类型,同样可分为可变(mutable)类型和不可变(immutable)类型。可变类型的值是可修改的。

JavaScript 可以自由地进行数据类型转换。比如,如果在程序期望使用字符串的地方使用了数字,JavaScript会自动将数字转换为字符串。如果在期望使用布尔值的地方使用了非布尔值,JavaScript也会进行相应的转换。

果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)。每个构造函数定义了一类(class)对象——由构造函数初始化的对象组成的集合。类可以看做是对象类型的子类型。

JavaScript 变量是无类型的(untyped),变量可以被赋予任何类型的值,同样一个变量也可以重新赋予不同类型的值。

JavaScript 不区分整数值和浮点数值。

JavaScript 语言核心包括Date()构造函数,用来创建表示日期和时间的对象。这些日期对象的方法为日期计算提供了简单的API。

JavaScript 的内置功能之一就是字符串连接。如果将加号(+)运算符用于数字,表示两数相加。但将它作用于字符串,则表示字符串连接,将第二个字符串拼接在第一个之后。

记住,在 JavaScript 中字符串是固定不变的,类似replace()和toUpperCase()的方法都返回新字符串,原字符串本身并没有发生改变。

在 ECMAScript 5 中,字符串可以当做只读数组,除了使用charAt()方法,也可以使用方括号来访问字符串中的单个字符。

JavaScript 定义了 RegExp() 构造函数,用来创建表示文本匹配模式的对象。这些模式称为“正则表达式”(regular expression),JavaScript采用Perl中的正则表达式语法。

布尔值包含 toString() 方法,因此可以使用这个方法将字符串转换为 true 或 false。

&& 运算符执行了逻辑与(AND)操作。当且仅当两个操作数都是真值时它才返回 true;否则返回 false。|| 运算符是布尔或(OR)操作,如果两个操作数其中之一为真值它就返回true,如果两个操作数都是假值则返回 false。最后,一元操作符 ! 执行了布尔非(NOT)操作:如果操作数是真值则返回 false;如果是假值,则返回true。

对 null 执行 typeof 预算,结果返回字符串 object,也就是说,可以将 null 认为是一个特殊的对象值,含义是 非对象。

当 JavaScript 解释器启动时(或者任何Web浏览器加载新页面的时候),它将创建一个新的全局对象,并给它一组定义的初始属性:

  • 全局属性,比如 undefined、Infinity 和 NaN。
  • 全局函数,比如 isNaN()、parseInt() 和 eval()
  • 构造函数,比如 Date()、RegExp()、String()、Object() 和 Array()
  • 全局对象,比如 Math 和 JSON

JavaScript 对象是一种复合值:它是属性或已命名值的集合。通过“.”符号来引用属性值。当属性值是一个函数的时候,称其为方法。通过o.m()来调用对象o中的方法。

字符串既然不是对象,为什么它会有属性呢?只要引用了字符串s的属性,JavaScript就会将字符串值通调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁。

ull 和 undefined 没有包装对象:访问它们的属性会造成一个类型错误。

字符串中所有的方法看上去返回了一个修改后的字符串,实际上返回的是一个新的字符串值。

原始值的比较是值的比较:只有在它们的值相等时它们才相等。

我们通常将对象称为引用类型(reference type),以此来和JavaScript的基本类型区分开来。依照术语的叫法,对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。

Number 类定义的toString()方法可以接收表示转换基数(radix)的可选参数,如果不指定此参数,转换规则将是基于十进制。同样,亦可以将数字转换为其他进制数。

Number 类为这种数字到字符串的类型转换场景定义了三个方法。toFixed()根据小数点后的指定位数将数字转换为字符串,它从不使用指数记数法。toExponential()使用指数记数法将数字转换为指数形式的字符串,其中小数点前只有一位,小数点后的位数则由参数指定(也就是说有效数字位数比指定的位数要多一位),toPrecision()根据指定的有效数字位数将数字转换成字符串。

parseInt() 可以接收第二个可选参数,这个参数指定数字转换的基数,合法的取值范围是2~36

JavaScript 的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。

一个变量的作用域(scope)是程序源代码中定义这个变量的区域。

当使用var声明一个变量时,创建的这个属性是不可配置的,也就是说这个变量无法通过delete运算符删除。可能你已经注意到了,如果你没有使用严格模式并给一个未声明的变量赋值的话,JavaScript 会自动创建一个全局变量。以这种方式创建的变量是全局对象的正常的可配值属性,并可以删除它们。

每一段 JavaScript 代码(全局代码或函数)都有一个与之关联的作用域链(scope chain)。这个作用域链是一个对象列表,这组对象定义了这段代码“作用域中”的变量。当JavaScript需要查找变量x的值的时候(这个过程称做“变量解析”(variable resolution)),它会从链中的第一个对象开始查找。

表达式(expression)JavaScript中的一个短语,JavaScript解释器会将其计算(evaluate)出一个结果。

左值(lvalue)是一个古老的术语,它是指“表达式只能出现在赋值运算符的左侧”。在JavaScript中,变量、对象属性和数组元素均是左值。

尽管函数声明语句和函数定义表达式包含相同的函数名,但二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,函数定义语句中的函数被显式地“提前”到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。使用var的话,只有变量声明提前了——变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提前:脚本中的所有函数和函数中所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以在声明一个JavaScript函数之前调用它。

在执行 for/in 语句的过程中,JavaScript解释器首先计算object表达式。如果表达式为 null 或者 undefined,JavaScirpt解释器将会跳过循环并执行后续的代码 。如果表达式等于一个原始值,这个原始值将会转换为与之对应的包装对象,其实,for/i n循环并不会遍历对象的所有属性,只有 可枚举(enumerable)的属

性才会遍历到。

单独使用break语句的作用是立即退出最内层的循环或switch语句。

return语句让解释器跳出函数体的执行,并提供本次调用的返回值。return语句只能在函数体内出现,如果不是的话会报语法错误。

continue语句和break语句非常类似,但它不是退出循环,而是转而执行下一次循环。

try/catch/finally 语句是 JavaScript 的异常处理机制。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐