(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。
为了方便操作,JavaScript提供了3个特殊的引用类型:Boolean、Number和String。实际上,每当读取一个基本类型值(boolean、number、string)的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用这些类型的方法来操作数据。
var s1 ="hello javascript";
var s2 = s1.substring(2);
在上面的例子中,s1是一个字符串,是基本类型值。而s1调用了substring()方法,理论上基本类型值不是对象,它们不应该有方法的。其实,为了实现这种操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,会完成下面一系列操作:
1、创建String类型的一个实例; var s1 = new String("some text");
2、在实例上调用指定的方法; var s2 = s1.substring(2);
3、销毁这个实例 s1 = null;
引用类型和基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。
vars1 ="hello";
s1.name ="Jack";
alert(s1.name); // undefined
对基本包装类型的实例调用typeof会返回object。
Object构造函数会根据传入值的类型返回相应的基本包装类型:
var obj1 =new Object("hello");
var obj2 =new Object(12);
var obj3 =new Object(true);
alert(obj1 instance of String);// true
alert (obj2 instance of Number);// true
alert(obj3 instance of Boolean);// true
注意,使用new调用基本包装类型的构造函数,与直接调用同名的转型函数不一样:
var val ="10";
var num = Number(val); // 转型函数(用于转换参数类型的函数)
alert (typeof num); // 类型是number
var obj =new Number (val); // 构造函数
alert (typeof obj);// 类型是object
Boolean类型
Boolean是与boolean(布尔值)相对应的基本包装类型
在布尔表达式中使用Boolean对象时要特别注意:布尔表达式中的所有对象都会被转换为true。
var falseObj = new Boolean (false); // falseObj变为了true
var result = falseObj &&true;
alert (result); // true
var falseVal =false; //直接用的布尔类型值,仍然是false
result = falseVal &&true;
alert(result); // false
基本类型与引用类型的布尔值还有两个区别:
typeof操作符对基本类型返回“boolean”,而基本包装类型返回“object”
使用instanceof操作符测试Boolean对象会返回true,而测试基本类型的布尔值则返回false。
alert (typeof falseObj); // 基本包装类型返回object
alert(typeof falseVal); // 基本引用类型返回boolean
alert(falseObj instanceof Boolean);// 基本包装类型返回true
alert(falseVal instanceof Boolean);// 基本引用类型返回false
Number类型
(1)toFixed()方法会按照指定的小数位返回值得字符串表示。
var num1 =11;
alert (num1.toFixed(2)); // "11.00"
var num2 =11.005;
alert (num1.toFixed(2)); // "11.01"
(2)toExponential()方法用于格式化,返回指数表示法。
var num =11;
alert (num.toExponential(1)); // “1.0e+1”
(3)toPrecision()方法可能返回固定大小格式,也可能返回指数格式。可以接收一个参数,表示数值的所有数字的位数(不含指数部分)
var num =99;
alert(num.toPrecision(1)); // "1e+2",即100,无法准确表示99
alert(num.toPrecision(2)); // "99"
alert(num.toPrecision(3)); // "99.0"
与Boolean类型相似,使用typeof和instanceof操作基本类型数值和引用类型数值时,得到的结果完全不同。
String类型
1、字符方法
两个用于访问字符串中特定字符的方法:charAt()和charCodeAt()。
charAt():以单字符串的形式返回给定位置的那个字符
charCodeAt():返回字符的编码
var strVal ="hello";
alert(strVal.char(1)); // "e"
alert(strVal.charCodeAt(1)); // "101"
2、字符串操作方法
concat()、slice()、substr()、substring()
3、字符串位置方法
indexOf()、lastIndexOf()
4、删除空格
trim()会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。
5.字符串大小写转换方法
toLocaleUpperCase()、toUpperCase()、toLocaleLowerCase()、strVal.toLowerCase()
6.字符串模式匹配方法
(1)match()
var text ="cat, bat, sat, fat";
var pattern =/.at/ ;
var matches = text.match(pattern);
alert (matches.index);// 0
alert (matches[0]);// "cat"
alert (pattern.lastIndex);// 0
(2)search()
var text ="cat, bat, sat, fat";
var pos = text.search(/at/);
alert(pos);// 1
(3)replace()
var text ="cat, bat, sat, fat";
var result = text.replace("at","ond");
alert(result); // cond, bat, sat, fat
result = text.replace (/at/g,"ond");
alert(result); // cond, bond, sond, fond
(4)split()
7、localeCompare()方法
localeCompare()用于比较两个字符串,并返回下列结果之一:
如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(多数情况为-1,具体由实现而定)
如果字符串等于字符串的参数,则返回0;
如果字符串在字母表中应该排在字符串参数之后,则返回一个整数(多数情况为1,具体由实现而定)
8.fromCharCode()
String构造函数本身有一个静态方法:fromCharCode()。这个方法的任务是接收一或多个字符编码,然后将它们转换成一个字符串。
alert (String.fromCharCode(104,101,108,108,111)); // "hello"