基本包装类型
基本包装类型包括:Number、Boolean、String。
每当 读取(访问)基本类型值时,后台就会创建一个 对应的基本包装类型的对象。从而让我们能调用一些方法来操作这个数据。 注:后台自动创建的基本包装类型的生命周期只存在于 执行 这行代码 的瞬间。
var s1 = "hellow javaScript";
var s2 = s1.substring(2);
这个例子中,变量s1包含一个字符串,字符串是基本类型值,而下一行调用了substring()方法,并将结果保存在了s2中,我们知道,基本类型值不是对象,是无法调用方法的。
其实,当第二行代码访问s1时,访问过程处于一种 读取模式,也就是从 内存中读取字符串值,而在读取模式中访问字符串时,后台会作以下的操作:
1、创建String类型的一个实例。
2、在实例上调用指定的方法。
3、销毁这个实例。
即:
var s1 = new String("hellow javaScript");
var s2 = s1.substring(2);
s1 = null;
通过关键字new创建的引用类型的实例,在 执行流离开 作用域 之前就一直存在内存中。而 自动创建(后台完成的操作)的基本包装类型的对象,则 只存在于一个行代码执行的瞬间, 然后立即销毁,这也就是我们不能在运行时为基本类型值添加属性和方法的原因。
var s1 = "hellow javaScript";
s1.color = "red";
console.log(s1.color); //undefined
在第二行代码时企图为s1添加一个color属性,但在执行第三行代码时,color属性不见了。这是因为第二行创建的String对象在执行第三代码时已经被销毁了,在第三行代码中,访问s1时会再次创建一个String对象,但这时的对象没有color属性了,所以弹出undefined。
Object构造函数就象工厂方法一样,根据 传入值的类型 返回 相应基本包装类型的实例。
var s1 = new Object("hellow javaScript"); //传入值的类型为字符串
console.log(s1 instanceof Stirng); //true
注意: 使用new调用基本包装类型的 构造函数,与 直接调用同名的 转型函数 是不一样的。
var value = "25";
var number = Nubmer(value); //转型函数
console.log(typeOf number); //number
var obj = new Number(value); //构造函数
console.log(obj); //object
number中保存的是基本类型值25,而obj保存的是object实例。
Boolean类型
Boolean类型是与布尔值对应的引用类型。要创建Boolean对象,可以调用Boolean构造函数并传入true或false。var BooleanObject = new Boolean(true); //转换成true
或
var BooleanObject = new Boolean(fale); //转换成true
布尔表达式中的 所有对象 都会被转换成true。
var a = new Boolean(false); //true
var b = a && true;
console.log(b); //true
var c = false;
var d = c && true;
console.log(d); //false
上述例子中,布尔表达式中的false会被转换成true,所以与true相与返回true,而基本类型值false与true相与返回false。
基本类型与引用类型的布尔值的两个区别:
1、typeof()操作符对 基本类型返回 " Boolean",而对 引用类型返回 " object"。
2、Boolean对象是Boolean类型的一个实例,instanceOf()测试Boolean对象返回 true,而测试基本类型的布尔值返回 false,因为基本类型布尔值本就不是引用类型。
Number类型
Number类型是数字值对应的引用类型,由创建Number对象,可以调用Number()构造函数并传入数字值。
var numberObject = new Nubmer(20);
Number类型也重写了toStriong()和toLocalString()方法,重写的valueOf()方法返回对象表示的基本类型数值。
toString()方法可以 指定进制 的将数字转换成 字符串表示的形式。
var num = 10;
console.log(num.toString(10)); //十进制表示 "10"
console.log(num.toString(16)); //十六进制表示 "a"
console.log(num.toString(2)); //二进制表示 "1100"
Number()类型其它转换成字符的方法
toFixed()按照指定的小数点位数返回数值的字符串形式。 toExponential()按照指定的小数点位数按e表示法返回数值的字符串形式。
toFixed()方法
此方法会按照 指定的 小数位 返回数值的字符串表示。var num = 10;
console.log(num.toFixed(3)); //10.000 指定的小数位为3位。
如果 数值本身的小数位多于指定的小数位,那么接近指定的最大值四舍五入。
var num = 10.006;
console.log(num.toFixed(2)); //10.01 指定小数位为2位,则四舍五入小数点后两位。
toExponential()
该方法返回以 指数表示法(e表示法)表示的数值 的字符串形式。接收一个参数,也是表示小数位数。var num = 100;
cosole.log(num.toExponential(2)); // 1e+2 小数位数为2 即1乘以10的2次方。
引用类型与基本类型的数字值也有一些区别:
1、typeOf()对基本类型值返回number,而对引用类型返回 object。
2、instanceOf()对Number对象返回 true,而对基本类型的数字值返回 false
String类型
String类型是字符串的对象包装类型,可以由构造函数Sting来创建。var a = new String("hello javaScript");
它的继承方法toSting()、toLocalString()、valueOf()返回基本字符串值。
String类型每个实例都有length属性,该属性表示字符串中有多少个字符。
var stringValue = "hello javaScript";
console.log(stringValue.length); //返回18 有18个字符 包括空格
字符方法
字符方法有: charAt()和charCodeAt()。charAt()
表示返回 指定索引位 的单字符字符串。参数只有一个即 表示字符的索引。charCodeAt()
表示返回 指定索引位 的单字符字符串的 字符编码。参数只有一个即 表示字符的索引位。
var sayHellow = "hellow javaScript";
console.log(sayHellow.charAt(1)); //返回索引为1的位置上的字符,即返回e
console.log(sayHellow.charCodeAt(1)); //返回索引为1的位置上的字符的字符编码,即110
类数组似的访问单字符的方法
var sayHellow = "hellow javaScript";
console.log(sayHellow[1]); //返回e
就像访问数组中的元素一样,变量名后跟方括号,括号里表示要访问字符的索引即可。
字符串操作方法
concat()方法
该方法用于 将一个或多个字符串拼接起来,传入的参数可为多个,可以是字符串,也可以是数组。 首先该方法会创建一个副本,将 参数的内容拼接到副本的末尾。
注:该方法不会影响原字符串。
var value = "hellow ";
var result = value.concat("javaScript", "!");
console.log(result); //hellow javaScript!
slice()、subString()、subStr()方法
这三种方法会
选取字符串的一部分,并返回被操作字符串的一个
子字符串,这三种方法也不会影响原字符串。
它们均接收二个参数,slice()、subString()、subStr方法的的第一个参数均表示选取字符的起始位置,即从哪里(索引)开始选取,slice()、subString()方法的第二个参数表示选取字符的结束位置(索引,但不包括此位置的字符)即子字符串的最后一个字符后面的位置。subStr()方法的第二个参数表示返回的字符个数。
在它们只接收一个参数的情况下,表示的是起始位置,选取字符是从起始位置到字符的末尾。
在 传入的参数为正值的情况下,就 如上所述:
var value = "hello world";
console.log(value.slice(3)); //lo world
console.log(value.subString(3)); //lo wordl
console.log(value.subStr); //lo world
console.log(value.slice(3, 7)); //lo w
console.log(value.subString3, 7)); //lo w
console.log(value.subStr(3, 7)); //lo wor
这三种方法 在传入的参数为负值的情况下:
subString()方法会将所有的负值转换成0。
slice()方法会将负值与字符串长度相加。
subStr()方法第一个参数会加上字符串的长度,第二个参数会转换成0,即选取空字符,输出的为""空字符串。
var value = "hello world";
console.log(value.slice(3, -4)); //lo w
console.log(value.subString(3, -4)); //hel
console.log(value.subStr(3, -4)); //""空字符
split()方法
该方法用于把一个 字符串分割成字符串数组。参数作为分割样式。当 不传递参数时: 输出原字符串
var str = "how are you?";
console.log(str.split()); //how are you?
当 传递的参数为空字符时: 每个字符以逗号作分割符被分割
var str = "how are you?";
console.log(str.split("")); //h,o,w, ,a,r,e, ,y,o,u,?
当 传递的参数为o时:以 字符o作为分割符
var str = "how are you?";
console.log(str.split("o")); h,w are y,u?
字符串位置方法(返回指定字符的索引)
indexOf()、lastIndexOf()方法
返回 指定字符的在字符串的 索引位置。
indeOf()返回指定字符 第一次出现 的位置索引, lastIndexOf()返回指定字符 最后一次出现的位置索引。接收的参数即为要查找的字符。
var value = "hello world";
console.log(value.indexOf("o")); //4 第一次出现的位置为索引4即第五个字符。
console.log(value.lsatIndexOf("o")); //7 最后一次出现的位置为索引7即第8个字符。
trim()方法
该方法会创建一个副本, 删除字符串前置、后缀的空格,字符之间的空格不变。var value = " hello javaScript ";
var result = value.trim();
console.log(result); //hello javaScript 字符串前后的空格已删除
字符串大小写转换方法
toUpperCase()
将字符串转换成大写形式,若已有大写的不变。小写的字符则变成大写的形式。var value = "Hello javaScript";
console.log(value.toUpperCase()); //HELLO JAVASCRIPT
toLowerCase()
将字符串转换成小写形式,若已有小写的不变。大写的字符变成小写的形式。
var value = "Hello javaScript";
console.log(value.toLowerCase()); /hello javascript
字符串模式匹配
match()方法
该方法与RegExp的exec()方法类似,查找字符串中是否有与正则表达式匹配的项,接收一个参数,要么是正则表达式,要么是RegExp对象。
检测字符串与正则表达式是否匹配,返回第一个匹配项,并带有第一个匹配项的索引。match返回的结果是一个包含第一个匹配项的数组。
var str = "cat, bat, dat";
var patt = /.at/gi; //查找以at结尾的
//与var result = patt.exec(str);一样
var result = str.match(patt);
console.log(result[0]); //cat
console.log(result.index); //0
search()
该方法返回第一个匹配项的索引。即在字符中第一次出现的位置。
var value = "ct, bat, dat";
var result = value.search(/.at/gi);
console.log(result); //1
replace()方法
1、当replace()方法的第二个参数是字符串时。
该方法表示替换指定字符,接收两个参数,第一个参数可以是一个RegExp对象或一个字符串,第二个参数可以是一个字符串或函数。如果 第一个参数是 字符串,那么 只会替换 第一个 字符串,想要 替换所有的字符串, 第二个参数提供为一个正则表达式,且要指定g全局标志。var value = "cat, bat, dat";
var rep = value.replace("at", "on");
console.log(rep); //con, bat, dat 只替换了第一个字符串。
var rep1 = value.replace(/at/g, "on");
console.log(rep1); //con, bon, don 替换了全部字符串
2、当replace()方法的第二个参数是特殊的字符序列时(RegExp构造函数的属性)。
通过这些属性,可以使用最近一次匹配的结果。
var str = "cat, bat, sat, fat";
var result = str.replace(/(.at)/g, "word ($1)"); //表示用"word(.at)"内容替换".at"
console.log(result); //word (cat), word (bat), word (sat), word (fat)
注:"/(.at)/"中的圆括号表示将".at"变成成 捕获组,为了"$1"匹配这个捕获组的字符串。
split()方法
基于
指定的分隔符将
一个字符串分割成
多个子字符串,并
将结果放于一个数组中。同时还可以接收第二个参数,表示指定数组的长度,相当于截取字符串。
var str = "red,blue,yellow,orange";
var result = str.split(",");
console.log(result); //["red", "blue", "yellow", "orange"]
var str = "red,blue,yellow,orange";
var result = str.split(",", 3);
console.log(result); //["red", "blue", "yellow"]
如果不指定分隔符,默认分隔符为逗号。
localeCompare()方法
两个字符串作比较,是比较对应位置的字母在字母表中字符编码的大小。如果第一个位置的字母相等,则比较第二个位置的字母,依次类推。
该方法用于比较两个字符串,规则如下:
1、如果 字符串 在字母表中 应排在 字符串参数 之前,则返回负数。
2、如果 字符串在字母表中 应排在 字符串参数 之后,则返回正数。
3、如果两个字符串 相等,则返回0。
注意:大写字母永远在小写字母之前,所以返回负数。
var value = "Good";
console.log(value.localeCompare("And")); //1或正数
console.log(value.localeCompare("yellow");); //-1或负数
console.log(value.localeCompare("Good");); //0
fromCharCode()方法
该方法是String构造函数的一个静态方法,作用是将接收的字符编码转换成字符串。该方法从本质上来看是与charCodeAt()执行的是相反的操作。console.log(string.fromCharCode(104, 101, 108, 108, 111)); //hello
单体内置对象
内置对象:不依赖宿主环境 的对象,在JavaScript程序 执行之前 就有的对象。如:Object、String、Array等均是内置对象。也就是说,内置对象无需实例化就已经实例化了。
单体内置对象:Global和window。所有原生引用类型都是Global的属性。
Global对象
所有在全局作用域中定义的变量和函数均是Global对象的属性和方法。Global对象其实是不存在的,在全局作用域中定义的变量和函数也是window对象的属性和方法。
在全局作用域中定义的属性和函数,均是Global对象的属性和方法。不属于其它对象的属性和方法,就是Global对象的属性和方法。
Global对象的方法有:isNaN()、isFinite()、parseInt()、parseFloat()。
URI编码方法
encodeURL()方法和encodeURLComponent()方法
后者会对发现的任何 非标准字符用UTF-8编码进行编码。这个我们在开发过程中常用的编码方法。
var url = "http://www.baidu.com/illegal value.html#start";
console.log(encodeURLComponent(url)); //http%3A%2F%2Fwww.baidu.com%2Fillega1%20value.html%23start
eval()方法
该方法就像是一个完整的解析器,它只接受一个参数,即要执行的javaScript代码 字符串。
eval("alert("hello javaScript")");
alert("hello javaScript");
var sayHi = "hello world";
eval("alert(sayHi)"); //hello world
相当于:
alert(sayHi); //hello world
eval("var sayHi = 'hello world';"); //不要忘了语句后面的分号
alert(sayHi); //hello world
eval()就相当于一个解析器,将要执行的代码以字符串换形式放入即可。
window对象
虽然无法访问到Global对象,但在 全局作用域下定义的变量和函数就是 window对象的属性和方法。
var a = "javaScript";
alert(a); //javaScript
window.alert(a); //javaScript
alert()方法就是window对象的方法。
Math()方法
Math()方法保存了数学公式。
Math对象的常见属性:
Math.E--自然对数的底数,即e的值。
Math.PI--3.1415926...
Math.SQRT2--2的平方根
min()和max()方法
分别为求最小值和最大值。
var value = [1, 2, 3, 5, 6];
console.log(value.max()); //6
console.log(value.min()); //1
舍入方法
舍入方法分为Math.ceil()向上舍入、Math.floor()向下舍入、Math.round()标准的四舍五入。
console.log(Math.ceil(25.4)); //26
console.log(Math.floor(25.9)); //25
console.log(Math.round(25.5)); //26
console.log(Math.round(25.4)); //25
random()方法
该方法为求0~1之间的随机数,格式:
随机值 = Math.random() * 可能值的总数 + 第一个可能的值
例:求0~50之间的随机数,第一个可能的值为20。
var num = Math.random() * 50 + 20;
console.log(num); //0~50之间的随机数。
Math()的其它方法
Math.asin(num)--反正弦
Math.abs(num)--求绝对值
Math.sqrt(num)--求平方根