JavaScript 之标准对象
标准对象
typeof new Number(123); //object,包装类型 new Number(123)===123;//false,类型不一致 var n=Number('123');//123,相当于parseInt()或parseFloat()
- 不要使用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'。
123..toString(); // '123', 注意是两个点! (123).toString(); // '123'
Date
let now=new Date(); now;//Date Thu Oct 17 2019 08:56:24 GMT+0800 (中国标准时间) now.getFullYear();//2019 now.getMonth();//9实际+1 now.getDay();//4,星期 now.getDate();//17,17号 now.getHours();//8 now.getMinutes();//56 now.getSeconds();//24 now.getMilliseconds();//134 now.getTime();//1571273784134,时间戳 //符合ISO 8601格式的字符串 var d= Date.parse('2015-06-24T19:49:22.875+08:00');//返回时间戳 var d = new Date(1571273784134); //时间戳变为Data对象 d.toLocaleString(); //"2019/10/17" d.toUTCString();//"Thu, 17 Oct 2019 00:56:24 GMT"
RegExp
[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}
更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符),^
表示行的开头,$
表示行的结束。
/正则表达式/或者new RegExp('正则表达式')
var re1 = /ABC\-001/; var re2 = new RegExp('ABC\\-001'); re1.test('ABC-001');//true
- 切分字符串
'a b c'.split(' '); // ['a', 'b', '', '', 'c'] 'a b c'.split(/\s+/); // ['a', 'b', 'c'] 'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd'] 'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']
- 分组
var re = /^(\d{3})-(\d{3,8})$/; //返回Array re.exec('010-12345'); // ['010-12345', '010', '12345'] re.exec('010 12345'); // null
- 贪婪匹配
var re = /^(\d+)(0*)$/; re.exec('102300'); // ['102300', '102300', ''] //默认贪婪匹配,\d+尽可能的匹配 var re = /^(\d+?)(0*)$/; re.exec('102300'); // ['102300', '1023', '00']
- 全局搜索
var s = 'JavaScript, VBScript, JScript and ECMAScript'; //标志g可以多个匹配,正则表达式会更新lastIndex属性 var re=/[a-zA-Z]+Script/g; // 使用全局匹配: re.exec(s); // ['JavaScript'] re.lastIndex; // 10 re.exec(s); // ['VBScript'] re.lastIndex; // 20 re.exec(s); // ['JScript'] re.lastIndex; // 29 re.exec(s); // ['ECMAScript'] re.lastIndex; // 44 re.exec(s); // null,直到结束仍没有匹配到
Json
var xiaoming = { name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-school': '\"W3C\" Middle School', skills: ['JavaScript', 'Java', 'Python', 'Lisp'] }; //第二个参数用于控制如何筛选对象的键值 JSON.stringify(xiaoming,['name','skills'],' '); //还可以传入函数,每个键值对都会被函数先处理 function convert(key, value) { if (typeof value === 'string') { return value.toUpperCase(); } return value; } JSON.stringify(xiaoming, convert, ' '); //可以添加toJSON()序列化的数据 var xiaoming = { name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-school': '\"W3C\" Middle School', skills: ['JavaScript', 'Java', 'Python', 'Lisp'], toJSON: function () { return { // 只输出name和age,并且改变了key: 'Name': this.name, 'Age': this.age }; } }; JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}' //反序列化 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}