原 三、基本概念

作者:汪娇娇

时间:2017年11月4日

一、语法

1、区分大小写

2、标识符

指变量、函数、属性的名字,采用驼峰大小写格式。

3、注释

单行://

多行:/*  */

4、严格模式

"use strict"

5、语句

以一个分号结尾,代码块用{}包起来。

二、关键字和保留字

关键字有指定用途;

break

do

instanceof

typeof

case

else

new

var

catch

finally

return

void

continue

for

switch

while

debugger*

function

this

with

default

if

throw

delete

in

try

保留字无特定用途,是关键字的备选。

abstract

enum

int

short

boolean

export

interface

static

byte

extends

long

super

char

final

native

synchronized

class

float

package

throws

const

goto

private

transient

debugger

implements

protected

volatile

double

import

public

三、变量

变量是松散类型,也就是可以用来保存任何类型的数据。

四、数据类型

ECMAScript中有5种简单数据类型(Undefined、Null、Boolean、Number和String)和一种复杂数据类型(Object)。

1、typeof操作符

2、Undefined

未对变量初始化。

3、Null

空对象指针。

用typeof检测null值时会返回“object”。

alert(null == undefiend);  //true

虽然null和undefined有这样的关系,但无论什么情况下,都没必要把一个变量的值显示的设为undefined,但只要意在保存对象的变量还没有真正保存对象时,就应该明确的让变量保存null值。

4、Boolean

虽然Boolean的字面量只有true和false这两个,但ECMAScript中所有类型的值都有与这两个值等价的值。

数据类型

转换为true的值

转换为false的值

Boolean

true

false

String

任何非空字符串

""(空字符串)

Number

任何非零数字值(包含无穷大)

0和NaN

Object

任何对象

null

Undefined

不适用

undefined

5、Number

(1)浮点数值

该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1;  //有效,但不推荐

对于极大极小的值,可以用e表示法(即科学计数法)。

var floatNum1 = 3.125e7; //31250000
var floatNum2 = 0.0000003; //3e-7

浮点数值的最高精度是17位小数,但在进行算数计算时其精确度远远不如整数。例如0.1加0.2的结果不是0.3,而是0.30000000000004 。

原因:这是使用基于IEEE754数值的浮点计算的通病。

(2)数值范围

最小值:Number.MIN_VALUE,这个值是 5e-324;

最大值:Number.MAX_VALUE,这个值是1.7976931348623157e+308;

如果超出数值范围:-Infinity和Infinity。

(3)NaN

NaN与任何数都不相等,包括NaN本身。

alert(NaN == NaN);  //false

isNaN()函数:接受一个参数,用来帮我们确定这个参数是否“不是数值”。

(4)数值转换

Number()、parseInt()、parseFloat()。

注:

Number():如果字符串是空的,则将其转换为0;

parseInt():如果字符串是空的,则将其转换为NaN;能够识别出各种整数格式(十进制、八进制和十六进制),还可以接受第二个参数(转换时使用的基数,即多少进制);

parseFloat():只解析十进制,无第二个参数,十六进制的字符串始终被转换成0 。

(5)String

  • 字符字面量

字面量

含义

\n

换行

\t

制表

\b

退格

\r

回车

\f

进纸

\\

斜杠

\'

单引号

\"

双引号

\xnn

以十六进制代码nn表示的一个字符

\unnn

以十六进制代码nnnn表示的一个Unicode字符

  • 字符串的特点

不可变

  • 转换为字符串

toString()、String()、与一个字符串("")加在一起

(7)Object

Object的实例都有下列属性和方法。

  • constructor:保存着用于创建当前对象的函数。
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。
  • isPrototypeof(object):用于检查传入的对象是否是传入对象的原型。
  • propertyIsEnumberable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。
  • toLocalString():返回对象的字符型表示,该字符串与执行环境的地区对应。
  • toString():返回对象的字符串表示。
  • valueOf():返回对象的字符串、数值或布尔值表示。

6、操作符

(1)一元操作符

只能操作一个值的操作符叫一元操作符。

  • 后置递增和递减(如num++,先用后加减)与前置递增和递减(如++num,先加减后用)的重要区别:递增和递减操作是在包含它们的语句被要求之后才执行。
  • 一元加和减操作符
var num = 25;
num = +num; //25
num = -num; //-25

在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。

(2)位操作符

32位:前31位表示整数的值,第32位表示数值的符号,0表示正数,1表示负数。这个表示符号的位叫符号位。

负数同样以二进制码存储,但使用的格式是二进制补码。

求补码步骤:求绝对值、反码、反码加1。

  • 按位非(~):反码(操作数负值减1)
  • 按位与(&)
  • 按位或(|)
  • 按位异或(^):只有一个1时才返回1
  • 左移(<<):所有位向左移动指定的位数
  • 有符号右移(>>)
  • 无符号右移(>>>)将数值的所有32位都向右移动

(3)布尔操作符

  • 逻辑非(!)
  • 逻辑与(&&)
  • 逻辑或(||)

我们可以利用逻辑或的这一行为(如果第一个操作数的求值结果为true,就不会对第二个操作数求值了)避免为变量赋值null或undefined值。

var myObject = preferredObject || backupObject;

(4)乘性操作符

  • 乘法

Infinity与0相乘,结果是NaN;

Infinity与非0数值相乘,结果是Infinity。

  • 除法

Infinity被Infinity除,结果是NaN;

0被0除,结果是NaN。

  • 求模

(5)加性操作符

  • 加法

Infinity与-Infinity相加,结果是NaN;

+0与-0相加,结果是+0。

  • 减法

(6)关系操作符

小于(<)、大于(>)、小于等于(<=)、大于等于(>=)。

大写字母的字符编码全部小于小写字母的字符编码。

(7)相等操作符

  • 相等和不想等:先转换再比较
  • 全等和不全等:仅比较而不转换

null和undefined相等,但不全等。

(8)条目操作符

var max = (num1 > num2) ? num1 : num2;

(9)赋值操作符

(10)逗号操作符

  • 声明多个变量;
  • 赋值。
var num1 = 1, num2 = 2, num3 = 3; //声明多个变量
var num = (5, 1, 4, 8, 0);  //num的值为0

7、语句

(1)if语句:最佳实践是使用代码块

(2)do-while语句:后测试循环语句,循环体中的代码至少要被执行一次

(3)while语句:前测试循环语句

(4)for语句:前测试循环语句

(5)for-in语句:用来枚举对象的属性,属性没有顺序

(6)label语句

label: statement

start: for(var i=0, i < count, i++){
   alert(i);
   if( i == 5){
      break start;
   }
}

这个例子中定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。

(7)break和continue语句

break:会立即退出循环,强制继续执行循环后面的语句。

continue:立即退出循环,但退出循环后会立即从循环顶部继续执行。

(8)with语句:将代码的作用域设置到一个特定的对象中。

with(location){
  var qs = search.substring(1);
  var hostName = hostname;
  var url = href;
}

(9)switch语句:流控制语句。

switch语句在比较值时使用的是全等操作符。

8、函数

(1)理解参数

ECMAScript中的参数在内部是用一个数组来表示的。在函数体内可以通过arguments对象来访问这个参数数组。

(2)没有重载

原因:没有函数签名

五、小结

Javascript的核心语言特性在ECMA-262中是以名为EC ECMAScript中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制作出规定。理解 ECMAScript及其纷繁复杂的各种细节,是理解其在Web浏览器中的实现 — Javascript的关键。目前大多数实现所遵循的都是ECMA-262第3版,但很多3也已经着手开始实现第5版了。以下简要总结了 ECMAScript中基本的要素。

1、ECMAScript中的基本数据类型包括 Undefined、Null、Boolean、Number和 String。

2、与其他语言不同, ECMAScript没有为整数和浮点数值分别定义不同的数据类型,,Number类型可 用于表示所有数值。

3、ECMAScript中也有一种复杂的数据类型,即 Object类型,该类型是这门语言中所有对象的基础类型。

4、严格模式为这门语言中容易出错的地方施加了限制。

5、ECMAScript提供了很多与C及其他类C语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。

6、ECMAScript从其他语言中借鉴了很多流控制语句,例如if语句、for语句和 switch语句等。

ECMAScript中的函数与其他语言中的函数有诸多不同之处。

1、无须指定函数的返回值,因为任何 ECMAScript函数都可以在任何时候返回任何值。

2、实际上,未指定返回值的函数返回的是一个特殊的 undefined值。

3、ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式。

4、可以向 ECMAScript函数传递任意数量的参数,并且可以通过 arguments对象来访问这些参数。

5、由于不存在函数签名的特性,,ECMAScript函数不能重载。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go语言interface详解

interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计...

3719
来自专栏chenjx85的技术专栏

leetcode-80-删除排序数组中的重复项 II

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

1421
来自专栏抠抠空间

列表(List) 的增删改查及其他方法

一、列表的简介     列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而...

40915
来自专栏黑泽君的专栏

java基础学习_基础语法(上)03_day04总结

============================================================================= ==...

1041
来自专栏进击的君君的前端之路

函数与作用域

1434
来自专栏闻道于事

Java之分支和循环

Java中的分支语句: if语句: if语句的四种写法:   (1)   if(表达式_布尔值) {   ...   }   (2)   if(表达式_布...

3149
来自专栏程序员与猫

常见的正则表达式解读释义

又名:写给正在学习前端的女友看的常见正则表达式解读。原文发布于 https://www.zybuluo.com/wddpct/note/728081 。 ...

2149
来自专栏HTML5学堂

获取对象具体类型的功能函数

HTML5学堂:JavaScript当中,时常会使用到typeof来进行数据类型的检测,但是我们觉得typeof不能够满足我们的需求,对于数组、函数、时间对象等...

3287
来自专栏Golang语言社区

谈谈Go语言的反射三定律

简介 Reflection(反射)在计算机中表示 程序能够检查自身结构的能力,尤其是类型。它是元编程的一种形式,也是最容易让人迷惑的一部分。 虽然Go语言没...

48911
来自专栏进击的君君的前端之路

字符串与JSON

6093

扫码关注云+社区

领取腾讯云代金券