最简单Js学习概要(2)- 基本引用类型

基本引用类型

由于可能书写 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 类型的对象,是可以添加属性或者方法的,那么这里呢。

常规三步走:

  1. 创建一个 String 类型的实例

  2. 调用实例上的特定方法

  3. 销毁实例

也就是如下:

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

三种特殊的引用类型

  1. Boolean

    比较 原始值 引用值 Boolean实例
    相同点 原始值 true 和 false 通过重写 valueOf 方法返回 原始值true和false
    不同点 参与逻辑运算,就是原始值 参与逻辑运算,不论什么情况,都是 true,因为本质是 Boolean 对象,布尔表达式自动转化为 true
    typeof boolean object
    instanceof Boolean false 不是Boolean 对象 true
  2. Number

    关于 Number 的一些方法就不介绍了,可以留待以后需要的时候 google

    比较 原始值 引用值 Number 实例
    typeof number object
    instanceof Number false true
  3. 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就好,所以其他的就省略了。

单例内置对象

可以简单理解为程序开始执行时就已经存在的对象,例如 ObjectArrayString,这里介绍的是另外两个。

Global

  1. url 编码方法

    方法名 用途
    encodeURL 网址编码,不能处理特殊字符,例如空格,冒号之类
    encodeURLComponent 编码所有
    decodeURL 对应解码
    decodeURLComponent 对应解码
  2. 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);
    // 这样就可以访问到了
    
  3. window 对象

    在浏览器中,window对象实现为 Global 对象的代理。所有全局作用域中生命的变量和函数都变成了 window 的属性。

Math

这些方法可能不常用,作为记录,用到再查不迟

类型 方法
对象属性 E 自然对数、PI 圆周率
极值 min,max
舍入方法 ceil floor round fround
随机值 random
其他方法 abs log pow
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容