首页 > 技术文章 > Javascript基本概念(一)

IamJiangXiaoKun 2016-08-01 18:07 原文

JavaScript基本语法:

ECMAScript的语法大量借鉴了C以及其他类C语言的语法。

ECMAScript中的一切(变量、函数名、操作符)都区分大小写。

标识符:

含义:指变量、函数、属性的名字,或者函数的参数。

规则如下:

1.          第一个字符必须是一个字母、下划线、或一个美元符号($);

2.          其他字符可以是字母、下划线、美元符号或数字。

按照惯例:ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩余每个单词的首字母大写。

不能将关键字、保留字true、false、null用作标示符。

注释:

单行://

多行:/*  */

严格模式:

ECMAScript5引入了严格模式(strict mode),严格模式就是JavaScript定义了一种不同的解析与执行模式。在严格模式下,ECMAScript3中的一些不确定行为将得到处理,对于一些不安全的操作也会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加如下代码:

“use strict”;

看起来这就像一个字符串,其实它就是一个编译指示(pragma),用于告诉支持的JavaScript引擎切换到严格模式。

严格模式也可以用到函数内部:

Function doSomething(){

       “use strict”;

       //函数体

}

严格模式下JavaScript的执行结果会有很大的不同。

语句:

ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。

关键字和保留字:

Javascript 的保留关键字不可以用作变量、标签或者函数名。有些保留关键字是作为 Javascript 以后扩展使用。

abstract

arguments

boolean

break

byte

case

catch

char

class*

const

continue

debugger

default

delete

do

double

else

enum*

eval

export*

extends*

false

final

finally

float

for

function

goto

if

implements

import*

in

instanceof

int

interface

let

long

native

new

null

package

private

protected

public

return

short

static

super*

switch

synchronized

this

throw

throws

transient

true

try

typeof

var

void

volatile

while

with

yield

   

* 标记的关键字是 ECMAScript5 中新添加的。


JavaScript 对象、属性和方法

您也应该避免使用 JavaScript 内置的对象、属性和方法的名称作为 Javascript 的变量或函数名:

Array

Date

eval

function

hasOwnProperty

Infinity

isFinite

isNaN

isPrototypeOf

length

Math

NaN

name

Number

Object

prototype

String

toString

undefined

valueOf

 

变量:

ECMAScript的变量是松散类型的,就是可以用来保存任何类型的数据。每一个变量仅仅是一个用于保存值的占位符而已。

定义变量:var 变量名; //像这种未初始化的变量会保存一个特殊的值-undefined

用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么在这个函数退出后就会被销毁,在函数中定义变量省去var那么该变量就变成了全局变量,不建议这样用。

可以使用一个语句定义多个变量,逗号分开即可。

数据类型:

ECMAScript中有五种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂的数据类型---Object,它本质上是由一组无序的名值对组成。ECMAScript数据类型具有动态性,因此定义这几个类型就够了。

Typeof操作符:

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

“undefined”->未定义

“boolean”->布尔值

“string”->字符串

“number”->数值

“object”->对象或null

“function”->函数

Typeof是一个操作符而不是函数。

(从技术的角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而函数也有一些特殊的属性,因此通过Typeof操作符来区分函数和其他对象是有必要的)

Undefined

此类型只有一个值,即特殊的undefined。在使用var声明变量但未对其进行初始化,此变量的值就是undefined。

Null:

它是第二个只有一个值的数据类型,这个特殊的值为null。从逻辑角度来说,null值表示一个空对象指针,这也正是Typeof检测null时返回object的原因。

如果定义的变量准备在将来保存对象,那么最好将该变量初始化为null而不是其他值,这样只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。实际上undefined值是派生自null的,它们之间用相等操作符(==)总是返回true,不过这个操作符出于比较的目的会转换为其他操作数。尽管它们之间有这样的关系,但它们的用途完全不同。

Boolean

此类型只有两个字面值:true/false。这两个值与数字值不一回事,并且区分大小写。

虽然它的值只有两个,但是ECMAScript中所有类型的值与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。

数据类型

转换为true

转换为false

Boolean

True

False

String

任何字符串

“”空字符串

Number

任何非零数值

0和NaN

Object

任何对象

Null

Undefined

N/A

undefined

 

 

Number:

它使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。为了支持各种数值类型,ECMA-262定义了不同的数值字面量格式。

最基本的数值字面量格式是十进制整数,除了十进制,还有八进制(第一位必须是0,然后数字序列为0~7,如果字面值中数值超出了范围,那么前导0将被忽略,后面的数子被当做十进制数值解析,在严格模式下八进制字面值是无效的,会导致JS引擎抛出错误)和十六进制(前面两位必须是0x,后跟十六进制数字0~9,A~F(或a~f))。在进行数字计算时都会转化为十进制进行计算。

鉴于Js中保存数值的方式,可以保存正零(+0)和负零(-0)。正零和负零被认为相等。

浮点数值:

所谓浮点数值,就是该数值必须包含一个小数点,并且小数点后面必须至少有一位数字。

由于保存浮点数值所需的内存空间是整数值的两倍,因此ECMAScript会不失时机地将浮点数转换为整数值。假如小数点后面没有任何数字就会最为整数值来保存。同样如果浮点数值本身表示的就是一个整数,那么该值也会被转换为整数。

对于那些极大值或极小值的数值,可以用e(或E)表示法(即科学计数法)表示的浮点数值。浮点数值的最高精度是17位小数。(注:浮点数值计算会产生误差,这是IEEE754数值浮点计算的通病)。

数值范围:

由于内存的限制,ECMAScript并不能保存世界上所有的数值。最小数值保存在:Number.MIN.VALUE,该数值是5e-324;最大数值保存在:Number.MAX.VALUE,该数值是1.7976931348623157e+308。如果计算结果超过该范围则自动转换为特殊的Infinity值,若为负数则为:-Infinity(负无穷);若为正数则为:Infinity(正无穷)。

如果某次计算返回了Infinity值,将无法进行下面的计算,因为Infinity不是能够参与计算的数值。想要确定一个数值是不是用穷的(也就是是不是位于最小和最大值之间),可以使用isFinite()函数。该函数参数位于最小和最大值之间将会返回true。

NaN:

NaN即非数值(Not a number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。在ECMAScript中,任何数值除以非数值会返回NaN,而不会影响其他代码的执行。(注:实际上0除以0才会返回NaN,整数除以0返回Infinitiy,负数除以0返回-Infinitiy)

两个特点:1>任何涉及NaN的操作都会返回NaN。

                      2>NaN与任何值都不相等,包括NaN本身。

根据以上两个特点,ECMAScript定义了isNaN()函数,该函数接受一个参数,该参数可以是任何类型,而这个函数会帮助我们确定这个参数是否不是数值。isNaN()接收到一个值后会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值。

isNaN()也适用于对象。在基于对象调用isNaN()函数时,会首先调用函数的。

(未完待续。。。)

 

推荐阅读