基本引用类型
由于可能书写 Js 代码的机会不多,所以在用法上不求甚解,可能讲的会比较简单,重点在于之后的原始包装类型
Date
日期的生成
var date1 = new Date('May 9th, 2020');
var date2 = new Date('May 9, 2020');
// 结果一致,所以其实上方隐式调用了parse
var date3 = new Date(Date.parse('May 9, 2020'));
// 注意这里的月份是从0开始的
var date4 = new Date(2020, 4, 9);
// 这里会有些微区别,是本地日期,不是GMT日期
var date5 = new Date(Date.UTC(2020, 4, 9));
// 有点类似于 Java 的多态
console.log(date1);
console.log(date2);
console.log(date3);
console.log(date4);
console.log(date5);
// Invalid Date
// Sat May 09 2020 00:00:00 GMT+0800 (中国标准时间)
// Sat May 09 2020 00:00:00 GMT+0800 (中国标准时间)
// Sat May 09 2020 00:00:00 GMT+0800 (中国标准时间)
// Sat May 09 2020 08:00:00 GMT+0800 (中国标准时间)
继承的方法
methods | feature |
---|---|
toLocalString | 浏览器一致,没有时区信息 |
toString | 带有时区信息 |
valueOf | 日期的毫秒表示 |
其他具体的方法,可能需要用到时候 google 也来的及,各位可以自己补充
原始值包装类型
从一个特殊的例子说起
let s1 = "lovefat";
let s2 = s1.substring(2);
还记得上一篇讲的那个例子吗,s1
是字符串,就算给它强行添加了属性,最后返回的也是 undefined
,那么所有的原始值应该都是没有方法的,但是此处的 substring
方法究竟是如何得到的呢?
同样是上一篇,讲到了使用 new
创建的 String
类型的对象,是可以添加属性或者方法的,那么这里呢。
常规三步走:
创建一个 String 类型的实例
调用实例上的特定方法
销毁实例
也就是如下:
let s1 = new String("some text");
let s2 = s1.substring(2);
s1 = null;
这样就会明白,Js
为什么非要允许一个这样奇怪的写法。
实例测试下
// 根据传入的值不同创建实例对象
let s1 = new Object("lovefat");
// 是一个对象
console.log(typeof s1);
// 同时又是一个字符串
console.log(s1 instanceof String);
// object
// true
三种特殊的引用类型
-
Boolean
比较 原始值 引用值 Boolean实例 相同点 原始值 true 和 false 通过重写 valueOf 方法返回 原始值true和false 不同点 参与逻辑运算,就是原始值 参与逻辑运算,不论什么情况,都是 true,因为本质是 Boolean 对象,布尔表达式自动转化为 true typeof boolean object instanceof Boolean false 不是Boolean 对象 true -
Number
关于
Number
的一些方法就不介绍了,可以留待以后需要的时候google
比较 原始值 引用值 Number 实例 typeof number object instanceof Number false true -
String
JavaScript
字符对多数字符,每16位码元对应一个字符,所以
length
属性其实就是有多少个16位码元。书中说的笑脸符号,应该是相当与两个字符位,但是实测结果不太一样,猜想可能是之后有过优化,这里就以实测结果记录。
let message = "ab☺de"; console.log(message.length); // 6 console.log(message.charAt(1)); // b // 这里跟书中说的不太一样 console.log(message.charAt(2)); // ☺ console.log(message.charCodeAt(2)); // 9786 console.log(message.charCodeAt(3)); // 100
常用方法记录
方法名 用途 length 长度 charAt 特定位置的字符 charCodeAt 特定位置的字符对应的ASCII码 concat + 拼接字符串 slice,substr,substring 提取子字符串,不会影响原字符串 indexOf lastIndexOf 字符串位置方法 startWith endsWith includes 字符串包含方法(比较简单) trim 去除前后的空格,不会影响原字符串 repeat 重复,不会影响原字符串 toLowerCase toLocaleLowerCase toUpperCase toLocaleUpperCase 大小写切换 实例操作
let str1 = 'love'; let res1 = str1.concat('fat'); console.log(res1); let str2 = 'fat'; // 更常用也更方便,可以利用js自动转化的特性 console.log(str1 + str2); let stringValue = "lovefat"; // 第二个参数为空,默认到最后 console.log(stringValue.slice(3)); console.log(stringValue.substring(3)); console.log(stringValue.substr(3)); // 前两个方法第二个参数位置上之前的字符被提取 console.log(stringValue.slice(3, 7)); console.log(stringValue.substring(3,7)); // 第二个参数指的是字符串长度 console.log(stringValue.substr(3, 7)); // 所有方法都不会修改原字符串,创建新的 let str3 = 'lovefat ooo'; // 未找到返回 -1 console.log(str3.indexOf('0')) // lastIndexOf 从后往前查找 console.log(str3.indexOf('o')) console.log(str3.lastIndexOf('o')) // 第二参数从第几个字符开始查找 console.log(str3.indexOf('o', 5)) console.log(str3.lastIndexOf('o', 5)) // -1 // 1 // 10 // 8 // 1
好吧,方法还是多的,每个语言,字符串的处理都是方法最多的,但是因为这里的目的是为了爬虫,这些方法又是比较简单的,随时google就好,所以其他的就省略了。
单例内置对象
可以简单理解为程序开始执行时就已经存在的对象,例如 Object
、Array
、String
,这里介绍的是另外两个。
Global
-
url
编码方法方法名 用途 encodeURL 网址编码,不能处理特殊字符,例如空格,冒号之类 encodeURLComponent 编码所有 decodeURL 对应解码 decodeURLComponent 对应解码 -
eval
方法简单理解就是把字符串格式的 js 代码执行,并且可以联系上下文,实例如下
eval("function sayHi() { console.log('hi'); }"); sayHi(); // hi 正常执行 eval("let msg = 'hello world';"); console.log(msg); // Reference Error: msg is not defined // 可以看做 let 只在eval的块作用域中存在 eval("var msg = 'hello world';"); console.log(msg); // 这样就可以访问到了
-
window
对象在浏览器中,
window
对象实现为Global
对象的代理。所有全局作用域中生命的变量和函数都变成了window
的属性。
Math
这些方法可能不常用,作为记录,用到再查不迟
类型 | 方法 |
---|---|
对象属性 | E 自然对数、PI 圆周率 |
极值 | min,max |
舍入方法 | ceil floor round fround |
随机值 | random |
其他方法 | abs log pow |