JavaScript复习笔记 (四)对象

在JavaScript的世界里,一切都是对象

一、对象类型:

有六种类型的对象:
number、string、boolean、function、undefined、object

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'

typeof操作符可以判断出 number、boolean、string、function和undefined

判断 Array 使用 Array.isArray(arr);
判断 null 使用 myVar === null;

判断某个全局变量是否存在用 typeof window.myVar === 'undefined';
函数内部判断某个变量是否存在用 typeof myVar === 'undefined'

二、包装对象:

用new创建的对象

包装对象的类型变为了object。所以,包装对象和原始值用===比较会返回false

typeof new Number(123); // 'object'
new Number(123) === 123; // false

typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false

typeof new String('str'); // 'object'
new String('str') === 'str'; // false

不要使用包装对象!尤其是针对string类型!

没有写new: Number()、Boolean和String()会把数据转换为number、boolean和string类型

1.不要使用new Number()、new Boolean()、new String()创建包装对象;
2.用parseInt()或parseFloat()来转换任意类型到number;
3.用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;
【null和undefined没有toString()方法】

三、Date

var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月
now.getDate(); // 24, 表示24号
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小时制
now.getMinutes(); // 49, 分钟
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳
  1. 创建指定对象

1️⃣
月份值从0开始(0-11)

var d = new Date(2015, 5, 19, 20, 15, 30, 123);
d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)

2️⃣
解析一个符合ISO 8601格式的字符串( 返回时间戳 )

var d = Date.parse('2015-06-24T19:49:22.875+08:00');
d; // 1435146562875

var d = new Date(1435146562875);
d; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
d.getMonth(); // 5

使用Date.parse()时传入的字符串使用实际月份01-12,
转换为Date对象后 getMonth()获取的月份值为0~11。

  1. 时区转换

时间戳可以精确地表示一个时刻,并且与时区无关。
任何浏览器都可以把一个时间戳正确转换为本地时间。

时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。

var d = new Date(1435146562875);
d.toLocaleString(); // '2015/6/24 下午7:49:22',本地时间(北京时区+8:00),显示的字符串与操作系统设定的格式有关
d.toUTCString(); // 'Wed, 24 Jun 2015 11:49:22 GMT',UTC时间,与本地时间相差8小时
  1. 获取当前时间戳
if (Date.now) {
    console.log(Date.now()); // 老版本IE没有now()方法
} else {
    console.log(new Date().getTime());
}

四、RegExp 正则表达式

1️⃣ 一些规则:

  1. \d匹配一个数字,.匹配任意字符,\s匹配空白字符

  2. \w匹配一个字母或数字,\W:匹配非单词字符,等价于[^a-zA-Z0-9_]

  3. *表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符

  4. 特殊字符,要用'\'转义

  5. []表示范围

  6. 断言:
    ^表示行的开头,$表示行的结束,\d$表示必须以数字结束。
    \b匹配一个单词的边界,\B 匹配非单词边界
    x(?=y):向前断言:x 被 y 跟随时匹配
    x(?!y):向前否定断言: x 没有被 y 紧随时匹配
    (?<=y)x:向后断言: x 跟随 y 的情况下匹配
    (?<!y)x:向后否定断言: x 不跟随 y 时匹配

2️⃣ 创建正则表达式,两种写法是一样的
——直接通过/正则表达式/写出来
——通过new RegExp('正则表达式')创建一个RegExp对象

3️⃣ RegExp对象的 test() 方法用于测试给定的字符串是否符合条件。如果字符串中含有匹配的文本,则返回 true,否则返回 false

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置

var n = str.search(/Runoob/i);
var n = str.search("Runoob");

replace() 方法用于在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式匹配的子串。

var txt = str.replace(/microsoft/i,"Runoob");
var txt = str.replace("Microsoft","Runoob");

match() :匹配,没有匹配到则返回null

4️⃣ 操作字符串

  1. 切分字符串
'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']
  1. 提取子串

用()表示要提取的分组,如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串

var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null

exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。匹配失败时返回null。

5️⃣ 贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

  • 加个?就可以让\d+采用非贪婪匹配

6️⃣ 全局搜索
g,表示全局匹配

var r1 = /test/g;
// 等价于:
var r2 = new RegExp('test', 'g');

全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。
当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引。

全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次。

7️⃣ 其他
i标志,表示忽略大小写
m标志,表示执行多行匹配

五、JSON

JSON定死了字符集必须是UTF-8
字符串规定必须用双引号"“,Object的键也必须用双引号”"。

JavaScript内置了JSON的解析。

  1. 对象序列化成JSON格式的字符串
var s = JSON.stringify(data);

有第二个参数:
可用于筛选键值,如果我们只想输出指定的属性,可以传入Array
还可以传入一个函数,这样对象的每个键值对都会被函数先处理

  1. 反序列化

将JSON格式的字符串变成JavaScript对象

JSON.parse()

JSON.parse()还可以接收一个函数,用来转换解析出的属性

var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值