基本概念

语法

区分大小写

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

标识符

1
2
3
4
5
6
指变量、函数、属性的名字,或者函数的参数。
标识符可以是按照下列格式规则组合起来的一或多个字符
1.第一个字符必须是字母、下划线(_)或一个美元符号($);
2.其他字符可以是字母、下划线、美元符号或数字
标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,但不推荐这样做。
按照惯例,ECMAScript标识符采用驼峰大小写格式

注释

1
2
3
4
5
6
7
ECMAScript采用C风格的注释,包括单行注释和块级注释
//单行注释
/*
*这是一个多行(块级)注释
*
*/
多的星号是为了提高注释的可读性(企业级应用中较多)

严格模式

1
2
3
4
5
6
7
8
	ECMAScript5引入了严格模式的概念。在严格模式下,ES3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误
使用:在顶部添加"use strict";
也可以指定函数在严格模式下执行:
function doSomething(){
"use strict";
//函数体
}
严格模式下,JavaScript执行结果会有很大不同,支持严格模式的浏览器包括IE10+\Firefox4+\Safari5.1+\Opera12+\Chrome

语句

1
2
ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾
建议不要省略它,可以避免很多错误(不完整输入),开发人员可以删除多余的空格来压缩ES代码,加上分号会在某些情况下增进代码的性能

关键字和保留字(不能用作标识符)

关键字(ECMA-262)

1
2
3
4
5
6
7
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

保留字

ECMA-262第三版

1
2
3
4
5
6
7
8
abtract		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

ECMA-262第五版

非严格模式

1
2
class	enum	extends		super
const export import

严格模式增加

1
2
3
implements		package		public
interface private static
let protected yield

变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ES的变量是松散类型的,可以用来保存任何类型的数据
var message;//定义了一个名为message的变量,初值为undefined
var message = "hi";
message = 100; //有效、但不推荐
//使用var操作符定义的变量将成为定义该变量的作用域中的局部变量
//如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁
function test(){
var message = "尼号";//局部变量
}
test();
alert(message);//错误
//但是可以通过省略var使message变成全局变量而显示,不过并不推荐这样做
//因为在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了var操作符,也会由于响应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误

//使用一条语句定义多个变量(,分隔)
var message = "hi",found=false,age=29;

数据类型

ECMAScript中有5种简单数据类型(基本数据类型)

  • Undefined
  • Boolean
  • Number
  • String
  • Null

以及一种复杂数据类型—Object

typeof操作符

1
2
3
4
5
6
7
8
9
10
由于ECMAScript是松散类型的,因此需要一种手段来检测给定变量的数据类型-typeof
使用typeof可能返回的结果
undefined 如果这个值未定义
boolean 如果这个值是布尔值
string 如果这个值是字符串
number 如果这个值是数值
object 如果这个值是对象或null
function 如果这个值是函数
注意:typeof 是一个操作符而不是函数,因此圆括号尽管可以使用,但不是必须的
typeof null 返回“object

Undefined类型

1
2
3
4
5
6
7
8
Undefined类型只有一个值,即特殊的undefined,使用var声明变量但未初始化时,变量的值就是undefined

var message;//默认undefined
//下面这个变量并未声明
//var age
alert(typeof message); //undefined
alert(typeof age); //undefined
//对未初始化和未声明的变量执行typeof操作符都返回了undefined

Null类型

1
2
3
4
5
6
7
Null类型是第二个只有一个值的数据类型,这个特殊的值是null
从逻辑角度来看,null值表示一个空对象指针,所以typeof检测null时会返回“object”
如果定义的变量准备在将来用于保存对象,最好将该变量初始化为null而不是其他值

undefined派生自null
alert(null==undefined); // true
//但是它们的用途完全不同,没必要把一个变量的值显式地设置为undefined,但要保存对象的变量还没有真正保存对象,就应该明确地让变量保存null

Boolean类型

1
2
3
1.区分大小写,True和False不是truefalse
2.可以调用Boolean()转型函数转换为boolean
转换规则如下
数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined 不适用 undefined

Number类型

1
使用IEEE754格式来表示整数和浮点数

浮点数值

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

1
2
3
4
5
6
7
8
9
10
11
12
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1 //有效,但不推荐
//由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值
var floatNum1 = 1. //解析为1
var floatNum2 = 10.0 //整数-解析为10

//对于极大或极小地数值,用e表示发法
var floatNUM = 3.12e7

//误差,IEEE754数值的浮点计算的通病
0.1+0.2=0.300000000000004(中间有很多个0就对了)

数值范围

1
2
3
4
5
由于内存限制,并不能保存世界上所有的数值
最小数值保存在Number.MIN_VALUE 大多数浏览器为5e-324
最大数值保存在Number.MAX_VALUE 大多数浏览器为1.7976931348623157e+308
超过转换为无穷Infinity
isFinite()函数,在数值范围内返回true

NaN

1
2
3
4
5
6
7
8
9
10
11
NaN,即非数值(Not a Number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
两个非同寻常的特点:
1.任何涉及NaN的操作都会返回NaN
2.NaN与任何值都不相等,包括NaN本身
eg:NaN/10 NaN==NaN false
针对这个特点,有isNaN()函数,接收一个参数,该函数会帮我们确定这个参数是否是“不是数值”
alert(isNaN(NaN)) //true
alert(isNaN(10)) //false
alert(isNaN("blue")); //true
alert(isNaN(true)) //false 可以->1
//isNaN()也使用于对象,首先调用对象的valueof()方法,如果返回值不能转换为数值再调用toString方法

数值转换

  • Number()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    可以用于任何数据类型
    null返回0undefined返回NaN
    如果是字符串遵循以下规则:
    1.如果只包含数字(包括+-),将其转换为十进制数字,忽略前导0
    2.如果字符串中包含有效的浮点格式(如"1.1"),将其转换为对应的浮点数值,忽略前导0
    3.如果字符串中包含有效的16进制格式,例如"0xf",将其转换为相同大小的10进制整数
    4.如果字符串为空,转为0
    5.如果字符串中包含除上述格式之外的字符,转换为NaN
    如果是对象:如上所说
    一元加操作符的操作和Number()函数相同
  • parseInt()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    由于Number()转换时复杂且不够合理,处理整数更多用parseInt()
    会忽略字符串前面的空格,直至找到第一个非空格字符
    如果第一个字符不是数字字符或者-,返回NaN,即parseInt()转换空字符串会返回NaN
    如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直至解析完或遇到一个非数字字符
    eg:1234blue->1234 22.5->22
    如果字符串中的第一个数字是数字字符,parseInt也能识别除各种整数格式
    var num3 = parseInt("0xA"); //10
    var num4 = parseInt(070); //56
    var num5 = parseInt("70"); //70
    为了消除8进制字面量转换时的歧义,函数的第二个参数表示转换时使用的基数
    var num1 = parseInt("AF",16); //175
    var num2 = parseInt("AF") //NaN
    建议无论再什么情况下都明确指定基数
  • parseFloat()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    基本与parseInt相同
    1.第一个小数点有效,第二个小数点就无效了
    "22.34.5"=>22.34
    2.始终忽略前导0,只解析10进制,如果可解析为整数则返回整数
    var num1 = parseFloat("1234blue") //1234
    var num2 = parseFloat("0xA") //0
    var num3 = parseFloat("22.5") //22.5
    var num4 = parseFloat("22.34.5") //22.34
    var num5 = parseFloat("0908.5") //908.5
    var num6 = parseFloat("3.12e7") 31200000

    String类型

    1
    2
    可以由双引号("")或单引号('')表示
    但是,以双引号开头的字符串必须以双引号结尾,单引号同

    字符字面量

    也叫转义序列,用于表示非打印字符,或者具有其他用途的字符

    字面量 含义
    \n 换行
    \t 制表
    \b 空格
    \r 回车
    \f 进纸
    \\ 斜杠
    \‘ 单引号
    \“ 双引号
    \xnn 以16进制代码nn表示的一个字符
    \unnnn 以16进制代码nnnn表示的一个Unicode字符

    字符串的特点

    ES中的字符串是不可变的,要像改变某个变量保存的字符串,需要先销毁原来的字符串,然后用另一个包含新值的字符串填充该变量

    1
    2
    var lang = "Java";
    lang = lang + "Script"

    转换为字符串

    • toString()方法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      数值、布尔值、对象和字符串值方法,但nullundefined没有这个方法
      toString可以传递一个参数:输出数值的基数
      注意和parseInt区分
      var num =10;
      alert(num.toString());//10
      alert(num.toString(2));//1010
      alert(num.toString(8));//12
      alert(num.toString(10));//10
      alert(num.toString(16));//a
    • 转型函数String()

      1
      2
      3
      4
      5
      在不知道要转换的值是不是nullundefined的情况下使用
      转换规则:
      1.如果值有toString()方法,调用该方法(无参数)并返回结果
      2.如果值是null,则返回"null"
      3.如果值是undefined,则返回"undefined"
    • 也可以+””实现转换

    Object类型

    ES中的对象其实就是一组数据和功能的集合

    1
    2
    3
    创建对象
    var o = new Object();
    //不传递参数时也可以省略括号,但是不推荐

    Object的每个实例都具有下列属性和方法

    • constructor:保存着用于创建当前对象的函数,前面的例子,构造函数就是Object();
    • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(o.hasOwnProperty(“name”))
    • isPrototypeOf(object):用于检查传入的对象是否时传入对象的原型
    • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,作为参数的属性名必须以字符串形式指定
    • toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应
    • toString():返回对象的空字符串表示
    • valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同

操作符

一元操作符

递增和递减(略)

一元加减操作符

基本算术运算,转换数据类型

位操作符


基本概念
https://blog-theta-ten.vercel.app/2021/06/29/基本概念/
作者
Chen
发布于
2021年6月29日
许可协议