JavaScript之基本包装类型

基本包装类型


基本包装类型包括: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"]

规定输出的数组长度为3:
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.acos(num)--反余弦


Math.asin(num)--反正弦


Math.abs(num)--求绝对值


Math.sqrt(num)--求平方根


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值