包装对象和内置对象

包装对象和单体内置对象

包装对象:对于基础数据类型来说,也可以使用属性,调用方法。


对于js解释器,逐行扫描运行代码, -》
如果发现‘.’或者‘[]’,解释器判断前面的变量是否是对象, -》
如果是基础类型,则解释器会创建与其对应的基本包装类型的对象,然后再去访问对象的属性或者调用对象的方法。
之后会马上销毁这个实例。


  1. 引用类型和基本包装类型的主要区别就是对象的生存期。
  2. 使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。
  3. 自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。(这意味着我们不能在运行时为基本类型值添加属性和方法)。

对基本包装类型的实例调用typeof会返回”object”,而且所有基本包装类型的对象都会有被转换为布尔值true。


在js中的基本类型Boolean、Number、String都有基本包装类型。NaN和undefined没有包装类型。

var a = "abcd";
a.length = 10;
console.log(a.length);

所有的包装的类型都是对象的一种,所以一些节本的方法都有。
1. Boolean类型的包装对象
(1) 重写了valueOf()方法,返回基本类型值true或false;
(2) 重写了toString()方法,返回字符串“true”和“false”。
2. Number类型的包装对象
除了valueOf()和toString()(会根据传入的参数,告诉它返回几进制数值的字符串形式)

toFixed()的几个问题:
(1)正常情况下是按照四舍五入方法取舍。
toExponential()用于格式化,返回该以指数表示法(科学计数法)表示的数值的字符串形式。
toPrecision()方法可能返回固定大小的格式,也可能返回指数格式;具体规则是看哪种格式最合适。

3.String类型的包装对象
(1)str.charAt(num) 查找指定位置的字符
(2)str.charCodeAt(num) 查找指定位置字符的编码
(3)str.contact(“”) 连接两个字符串(基本不用)
(4)str.indexOf() 返回字符串的位置索引,没找到则返回-1
(5)str.lastIndexOf()
(6)split(”) 以某个字符分割字符串,返回数组
(7)slice(start,end) 截取字符串
(8)subString(start,end) 截取字符串,两个方法的异同: 都是从开始位置截取到结束位置的前一位。字符串长度为end-start;
区别:

当end

var string = " hello my girl ";
var string1 = string.trim();
console.log(string1);  //hello my girl
var string2 = string.trimLeft();
var string3 = string.trimRight();
console.log(string2+'/'+string3); //hello my girl / hello my girl
var str = "1234567890";
var str1 = str.charAt(3); //参数为索引值,从0开始,返回参数位置的字符
console.log(str1); //4
var str2 = str.charCodeAt(3); //参数为索引,返回索引位置的字符的ASCII码。
console.log(str2); //52
var str3 = str.concat(str,'abc'); //将两个字符串连接,结果是连接后的新字符串
console.log(str3); //12345678901234567890abc
var str4 = str.indexOf('4',3); //从字符创中从第3个位置从前到后查找子串的位置
console.log(str4);  //3
var str41 = str.lastIndexOf('4', 7); //从字符创中从第3个位置从后到前查找子串的位置
console.log('str41 '+str41);//str41 3
var str50 = str.split(''); 
console.log(str50); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' ]
var str5 = str.slice(-2,4);
console.log('str5 '+str5); //str5
var str6 = str.substring(4, -2);//从两个参数中比较小的开始截取
console.log(str6); //1234
var str7 = str.substr(2,3); //参数形式substr(start,len) 从开始位置截取固定长度字符
console.log('str7 '+str7);// str7 345

es6中的操作字符串的方法:
(1)padStart(),padEnd():ES7推出了字符串补全长度的功能。如果某个字符串长度未达指定长度,会在头部或尾部补全。padStart用于头部补全,padEnd用于尾部补全。如果原字符串的长度大于或等于指定的最小长度,则返回原字符串。
(2)includes():返回布尔值,表示是否找到了参数字符串;(建议在es5中自己封装)
(3)startsWith():返回布尔值,表示参数字符串是否在源字符串的头部;
(5)endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部;
(6)repeat(),repeat方法返回一个新字符串,表示将原字符串重复n次。

'x'.padStart(5, 'ab') //'ababx'
'x'.padStart(4, 'ab') //'abax'

'x'.padEnd(5, 'ab') //'xabab'
'x'.padEnd(4, 'ab') //'xaba'

'xxx'.padStart(2, 'ab') //'xxx'

字符串和正则表达式的使用:

字符串处理举例:

(1)字符串的反转
使用split()将字符串转化成数组,再使用reverse()将数组进行反转,再join(),返回字符串。
(2)在页面上显示今天是星期几?

'今天是星期'+'日一二三四五六'.charAt(new Date().getDay());

(3)获取url的参数
(4)将变量转换成驼峰式命名方式

Global对象的属性

Global对象是不存在的,不能使用new实例化出来的对象,没有全局变量或全局变量,所有在全局作用域内定义的属性和方法,都是Global对象的属性。
3个特殊值:undefined、NaN、Infinity;

方法:

isNaN()、isFinite()、parseInt()以及parseFloat()。


其他的方法:
(1)URI编码方法
URI(Uniform Resource Identifers,通用资源标识符) 有效的URI不能包含某些字符,使用encodeURI()和encodeURIComponent()方法都可以对URI进行编码。
两个方法的区别是,encodeURI()不会对本身属于URI的特殊字符进行编码。
encodeURIComponent()则会对它发现的任何非标准字符进行编码。


var uri = "http://www.google.com/lulu loveyou.html#honey";
console.log(encodeURI(uri));
//http://www.google.com/lulu%20loveyou.html#honey
console.log(encodeURIComponent(uri));
//http%3A%2F%2Fwww.google.com%2Flulu%20loveyou.html%23honey

相应的解码方式:
decodeURI()、decodeURIComponent()
只能对相对应的编码的uri进行解码。


简单的获取Global对象的方法:

var global = function(){
    return this;
}();

eval()作用

(1)在低版本的浏览器中,将json解构转化成字符串。
在es5中可以json自带转换方式。
(2)动态生成变量
(3)代码压缩的时候
如果想看源码,把eval内容复制出来,再console.log()
注意问题:

  1. eval()中的声明不会提前,
  2. eval()内的变量在外面访问不到。
  3. eval()对性能影响,本身就是一个解释器。
  4. 解释器一般都会使用快速模式,如果有eval(),解释器不知道eval()内部做什么,就会进入安全编译模式,性能大幅度下降。
  5. 具有较大的安全隐患。 (会执行字符串中的代码,也就是会执行携带恶意攻击的代码)

Math对象

(1)属性:Math.PI 圆周率

(2)方法:
取整的三个方法:

round() 对现在的数+0.5 向下取整 四舍五入
ceil() 比值大的最小的整数
floor() 比值晓得最大的整数

min(),max() 求最大最小值 (es3中只能接受2个参数, es5中能接收多于2个参数)。
random()返回结果是生成一个0~1的随机数,从理论上能得到0或1,但是实际上不能获得。
利用random生成随机的字符串:(通过toString()方法)

Math.random().toString(36);

random()生成的是小数点后是22-26位之间。
字符数量实在10-20 之间,字母出现的概率基本平均,字符i的出现频率比较高,会比其他高出50%左右。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值