一.ECMAScript 原始值和引用值
在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值。
1.原始类型:
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。
①.Undefined 类型:
undefined类型只有一个undefined类型。声明未初始化的时候,变量默认就是underfined。
例如:
var abc;
此时,只申明变量,未初始化,该变量将被赋予underfined。
②.Boolean类型:
boolean有两个值 true 和 false (即两个 Boolean 字面量)。
③.Null类型:
另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
alert(null == undefined);//输出 "true"
尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
④.Number 类型:
这种类型既可以表示 32 位的整数,还可以表示 64 位的浮点数。直接输入的(而不是从另一个变量访问的)任何数字都被看做 Number 类型的字面量。
⑤.String类型:
String 类型的独特之处在于,它是唯一没有固定大小的原始类型。
字符串字面量是由双引号(")或单引号(')声明的。
var str1 = "ES6";
var str2 = 'ES6';
都是正确的。
2.引用类型:
引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象。
对象是由 new 运算符加上要实例化的对象的名字创建的。
var obj = new Objecr();
①.Object对象:
ES中所有对象都由这个对象继承而来,Object对象中所有属性和方法都会出现在其他对象中。
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对象
Boolean 对象是 Boolean 原始类型的引用类型。
要创建 Boolean 对象,只需要传递 Boolean 值作为参数:
var oBooleanObject = new Boolean(true);
③.Number 对象
Number 对象是 Number 原始类型的引用类型。
valueOf()方法:可以得到数字对象的Number原始值。
toFixed() 方法:可以返回的是具有指定位数小数的数字的字符串表示。
var numberObj = new Number(15);
alert(numberObj.valueOf() ); //输出15;
alert(numberObj.toFixed(2)); //输出15.00
④.String对象
String 对象是 String 原始类型的对象表示法。
String 对象的 valueOf() 方法和 toString() 方法都会返回 String 类型的原始值。
String对象的属性:
length属性:字符串的字符个数。
String对象的方法:
charAt() 方法:返回的是包含指定位置处的字符的字符串。
charCodeAt() 方法:返回的是包含指定位置处的字符的字符代码。
var str = new String("hello world");
alert(str.charAt(1)); //输出 "e"
alert(str.charCodeAt(1)); //输出 "101"
concat() 方法:用于把一个或多个字符串连接到 String 对象的原始值上。
var str = new String("hello world");
var str2 = str.concat("123") ;
alert(str2); //输出“hello world123”
indexOf()方法:从字符串的开头(位置 0)开始检索指定的子串在另一个字符串中的位置。
lastIndexOf() 方法:从字符串的结尾开始检索指定的子串在另一个字符串中的位置。
var str = new String ("hello world");
alert(str.indexOf("e")); //输出 "1"
alert(str.lastIndexOf("e")); //输出 "9"
localeCompare() 方法:对字符串进行排序。
该方法有一个参数 - 要进行比较的字符串,返回的是下列三个值之一:
-如果 String 对象按照字母顺序排在参数中的字符串之前,返回负数。
-如果 String 对象等于参数中的字符串,返回 0。
-如果 String 对象按照字母顺序排在参数中的字符串之后,返回正数。
var str = new String ("b");
alert(str.localeCompare("a")); //输出 "1"
alert(str.localeCompare("b")); //输出 "0"
alert(str.localeCompare("c")); //输出 "-1"
slice() 和 substring()方法:字符串截取。这两种方法返回的都是要处理的字符串的子串,都接受一个或两个参数。第一个参数是要获取的子串的起始位置,第二个参数(如果使用的话)是要获取子串终止前的位置(也就是说,获取终止位置处的字符不包括在返回的值内)。如果省略第二个参数,终止位就默认为字符串的长度。
不同之处:对于负数参数,slice() 方法会用字符串的长度加上参数,substring() 方法则将其作为 0 处理(也就是说将忽略它)。
例如:
var oStringObject = new String("hello world");
alert(oStringObject.slice("3")); //输出 "lo world"
alert(oStringObject.substring("3")); //输出 "lo world"
alert(oStringObject.slice("-3")); //输出 "rld"
alert(oStringObject.substring("-3")); //输出 "hello world"
alert(oStringObject.slice("3, -4")); //输出 "lo w"
alert(oStringObject.substring("3, -4")); //输出 "hel"
toLowerCase()、toLocaleLowerCase()、toUpperCase() 和 toLocaleUpperCase()方法:4 种方法用于执行大小写转换。
从名字上可以看出它们的用途,前两种方法用于把字符串转换成全小写的,后两种方法用于把字符串转换成全大写的。
toLowerCase() 和 toUpperCase() 方法是原始的,是以 java.lang.String 中相同方法为原型实现的。
toLocaleLowerCase() 和 toLocaleUpperCase() 方法是基于特定的区域实现的(与 localeCompare() 方法相同)。在许多区域中,区域特定的方法都与通用的方法完全相同。
一般来说,如果不知道在以哪种编码运行一种语言,则使用区域特定的方法比较安全。
var oStringObject = new String("Hello World");
alert(oStringObject.toLocaleUpperCase()); //输出 "HELLO WORLD"
alert(oStringObject.toUpperCase()); //输出 "HELLO WORLD"
alert(oStringObject.toLocaleLowerCase()); //输出 "hello world"
alert(oStringObject.toLowerCase()); //输出 "hello world"