ECMAScript 老生常谈(总结) 一、基础篇

176 阅读4分钟

基础语法(可跳过)

语法

1.区分大小写

2.变量是弱类型的

3.每行结尾的分号可有可无

原始值和引用值

在许多语言中,字符串都被看作引用类型,而非原始类型,因为字符串的长度是可变的。ECMAScript打破了这一传统。

如上图,引用类型的值将内容存储在堆中,然后将堆的地址存储在栈中,因为地址的大小是固定的,所以对寻找变量的性能无负面影响。

原始类型

即Undefined、Null、Boolean、Number和String。 提供了typeof运算符判断原始类型。

八进制数和十六进制数

var eightNum = 070;

等于十进制的 56。 也就是说八进制开头加0。

var sNum = 0x1f;

等于十进制的 31。 也就是说十六进制开头加0x。

浮点数

var fNum = 5.0;

fNum == 0.9999999999999999 (十六个9) 为false;

fNum == 0.99999999999999999(十七个9) 为true;

无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。

String 类型

是唯一没有固定大小的原始类型。

每个字符都有特定的位置,首字符从位置0开始,第二个字符在位置1,依此类推。

下面列出了ECMAScript的字符字面量:

引用类型

Object

对象具有下列属性:

constructor

对创建对象的函数的引用(指针)。对于Object对象,该指针指向原始的Object()函数。

Prototype

对该对象的对象原型的引用。对于所有的对象,它默认返回Object对象的一个实例。

Object 对象还具有几个方法:

hasOwnProperty(property)

判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))

IsPrototypeOf(object)

判断该对象是否为另一个对象的原型。

PropertyIsEnumerable

判断给定的属性是否可以用for...in语句进行枚举。

ToString()

返回对象的原始字符串表示。对于Object对象,ECMA-262没有定义这个值,所以不同的ECMAScript实现具有不同的值。

ValueOf()

返回最适合该对象的原始值。对于许多对象,该方法返回的值都与ToString()的返回值相同。

Boolean 布尔对象

那么 j && true 等于什么?

因为在Boolean表达式中,所有对象都会被自动转换为true。计算的是对象 j 而不是j的值

Number 对象

toFixed()

返回的是具有指定位数小数的数字的字符串表示。

toExponential()

科学计数法

toPrecision()

指定几个数字表示,相当于上面两个方法的综合。

指定数太大,就在小数后面加相应数量的0

String 对象

下列方法均不改变原字符串

length属性

String对象具有属性length,它是字符串中的字符个数。

charAt()方法

返回的是包含指定位置处的字符的字符串。

charCodeAt()方法

查询字符char码

char表移步: blog.csdn.net/liehuo123/a…

concat()方法

连接字符串

indexOf() 和 lastIndexOf() 方法

indexOf()从开头开始查询,lastIndexOf()从结尾开始查询

返回字符所在索引

不存在返回-1

localeCompare() 方法

不常使用,比较字符串大小,大返回1,小返回-1,相等返回0。

slice() 和 substring()

两个方法参数均为正值时,截取从开头截取到结尾(但不包括结尾),也就是我们曾经说过的 区间左闭右开

感谢我的初中数学老师。

接下来参数为负数

如下图当slice的参数为-3时,参数转换为 length-3

如下图当substring的参数为负数时,参数转换为 0

转换同上

如下图当substring的两个参数中有负数时,总是转换为0,并且substring方法总是从数值小的开始截取到数值大的结束

toLowerCase()、toLocaleLowerCase()、toUpperCase() 和 toLocaleUpperCase()

都是转换大小写,不改变原字符串,尽量使用toLocaleLowerCase和toLocaleUpperCase比较安全。有几种语言对Unicode大小写转换应用了特定的规则(例如土耳其语),因此必须使用区域特定的方法才能进行正确的转换。如果不知道在以哪种编码运行一种语言,则使用区域特定的方法比较安全。

instanceof 运算符 typeof运算符判断对象时比较无力,instanceof在这方面就比较给力了

但是instanceof不如typeof灵活,下图c是字符串值却不是String的示例,所以instanceof看不出c是字符串,typeof却能看出。

下图d为String示例所以为true,虽然不如typeof灵活,但是判断对象更加准确,所以instanceof能判断出d是字符串,typeof只能判断出是对象

总结来说,instanceof比typeof更加会判断对象的种类,其余最好用typeof因为他更加全面

后面我会接着发ECMASrcipt 第二篇 运算符篇