标准对象
typeof判断类型
返回值是一个字符串。
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'
JavaScript
提供了包装对象,类似于Java
中int
和Integer
的关系。JS中Number
Boolean
String
可以使用new
创建这类对象,但是这类导致判断不同于之前,例如
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
所以,JS中不要使用包装对象!
关于JS的几条原则,
- 不要使用
new Number()
、new Boolean()
、new String()
创建包装对象; - 用
parseInt()
或parseFloat()
来转换任意类型到number
; - 用
String()
来转换任意类型到string
,或者直接调用某个对象的toString()
方法; - 通常不必把任意类型转换为
boolean
再判断,因为可以直接写if (myVar) {...}
; typeof
操作符可以判断出number
、boolean
、string
、function
和undefined
;- 判断
Array
要使用Array.isArray(arr)
; - 判断
null
请使用myVar ===null
- 判断某个全局变量是否存在用
typeof window.myVar === 'undefined'
; - 函数内部判断某个变量是否存在用
typeof myVar === 'undefined'
Date
var now = new Date();
now; // Thu Mar 07 2019 18:03:16 GMT+0800 (中国标准时间)
now.getFullYear(); // 2019, 年份
now.getMonth(); // 2, 月份,注意月份范围是0~11,2表示三月
now.getDate(); // 7, 表示7号
now.getDay(); // 4, 表示星期四
now.getHours(); // 18, 24小时制
now.getMinutes(); // 3, 分钟
now.getSeconds(); // 16, 秒
now.getMilliseconds(); // 317, 毫秒数
now.getTime(); // 1551952996317, 以number形式表示的时间戳
注意:当前时间是浏览器从本机获取的时间。
正则表达式
表示字符
\d
一个数字,等价于[0-9]
\w
一个字符或数字或下划线,等价于[A-Za-z0-9_]
\s
一个空白字符,等价于[\f\n\r\t\v]
另外,以上都有大写版本,例如 \D
,表示非数字,等价于[^0-9]
限定符
*
0次或多次
+
1次或多次
?
0次或1次
()
用于子表达式,结合reg.exec(str)
使用
[]
表示其中一个
正则表达式匹配
//正则的定义有两种,1. 用/ /括起来 2. 用RegExp表示
var re = /^\d{3}\-\d{3,8}$/;
re = new RegExp('^\d{3}\-\d{3,8}$');
//test用于判断是否匹配,true表示匹配.
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false
正则表达式分组
//含有()的子表达式,用来分组,可以提取出来
var re = /^(\d{3})-(\d{3,8})$/;
//通过exex方法做提取,返回数组,数组第一个为总体
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
当分组出现左右都满足的时候,默认分组是贪婪匹配
, 也可以修改为 非贪婪匹配,如,/^(\d+)(0*)$/
修改为 /^(\d+?)(0*)$/
非贪婪匹配。
JSON
json
格式我们比较熟悉了,几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
序列化
将js对象
转化为json
JSON.stringify(obj)
这个函数有多个参数,第二个表示处理函数,第三个参数表示格式化分隔符
'use strict';
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '\"W3C\" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};
var s = JSON.stringify(xiaoming); //s==={"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}
//格式化输出
JSON.stringify(xiaoming, null, ' ');
//value为string时,转化为大写
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(xiaoming, convert);
反序列化
将字符串,转化为javaScript对象
JSON.parse(str)
这个函数有两个参数,第一个为string,第二个为处理函数
//string转化为对象
var xiaoming = JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
//当key为name时,处理,加上 同学
var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {
if (key === 'name') {
return value + '同学';
}
return value;
});
console.log(JSON.stringify(obj)); // {name: '小明同学', age: 14}