内置对象和方法
var s1 = "abc"和var s2 = new String("abc")的区别:typeof s1 --> string而 typeof s2 --> Object
注意:内置对象首字母都是大写。
1. 自定义对象:
1.1 JavaScript的对象(Object)本质上是键值对。键在JS里面叫属性。
var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);
1.2 遍历对象中的内容:
for(var i in a){
console.log( i, a[i] )
};
结果是name Alex
age 18
1.3 键的引号可有可无:
var person2 = {name:'tom',age:18};
输入person2的结果是Object { name: "tom", age: 18 }
var person3 = {'name':'tom','age':18};
输入person3的结果是Object { name: "tom", age: 18 }
1.4 创建对象
var person4 = new Object(); //创建对象
person4.name = 'marry'; //添加键值对(属性值)
person4['age'] = 18; //添加键值对(属性值)
注意:
var name = 'abc';
var person = {
name:'tom',
age:18,
abc:123
};
执行person[name],结果是123
2. Date对象
2.1 创建Date对象
//方法1:不指定参数,当地时间
var d1 = new Date();
console.log(d1.toLocaleString());
结果: 2020/3/4 下午2:30:11
//方法2:参数为指定日期的字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
结果: 2004/3/20 上午11:12:00
//方法3:参数为毫秒数,从1970年开始跑了5000毫秒是什么时间
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());
结果: 1970/1/1 上午8:00:05
Thu, 01 Jan 1970 00:00:05 GMT
//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,0,20,11,12,0,300);
console.log(d4.toLocaleString()); //毫秒并不直接显示
结果: 2004/1/20 上午11:12:00--->上面的0代表1月
2.2 Date对象的方法:
var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)
3. JSON对象
var a = '{"name": "Alex", "age": 18}';
var b = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(a);
// 对象转换成JSON字符串
var str = JSON.stringify(b);
4. Math对象:数学常用方法
abs(x) 返回数的绝对值。
floor(x) 对数进行下舍入。Math.floor(5.8)和Math.floor(5.1);结果都是5
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。Math.pow(10,2);结果是100
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。Math.round(5.1);结果是5。Math.round(5.5);结果是6。
5. RegExp对象,正则表达式
5.1 RegExp对象创建方式一:
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$"); //创建RegExp对象方式(逗号后面不要加空格)
var s1 = "bc123"; //要匹配的字符串
reg1.test(s1); // true //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
5.2 RegExp对象创建方式二:
var reg1 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; //不需要引号
5.3 简写:/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("bc123");
5.4 四个方法:
var s2 = "hello world";
s2.match(/o/g); // ["o", "o"] 查找字符串中 符合正则 的内容
s2.search(/h/g); // 0 查找字符串中符合正则表达式的内容位置
s2.split(/o/g); // ["hell", " w", "rld"] 按照正则表达式对字符串进行切割
s2.replace(/o/g, "s"); // "hells wsrld" 对字符串按照正则进行替换
5.5 g和i
var s1 = "name:Alex age:18";
s1.replace(/a/, "哈哈哈"); // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈"); // "n哈哈哈me:Alex 哈哈哈ge:18" 全局匹配,g是globle
s1.replace(/a/gi, "哈哈哈"); // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18" 不区分大小写
5.6 注意事项:
// 注意事项1:
// 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,
而是从属性regExpObject.lastIndex所指定的索引处开始查找。
// 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
// 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
// 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
// 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。
var reg3 = /foo/g;
// 此时 regex.lastIndex=0
reg3.test('foo'); // 返回true
// 此时 regex.lastIndex=3
reg3.test('xxxfoo'); // 还是返回true
// 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号。
// 注意事项2:
// 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test("undefined"), 并且/undefined/.test()默认返回true。
test()的()不能为空
var reg4 = /^undefined$/;
reg4.test(); // 返回true
reg4.test(undefined); // 返回true
reg4.test("undefined"); // 返回true
// 注意事项3:不能有空格
/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; //{5,11}不能有空格,例如{5, 11}逗号后面有空格,结果就不一样了。