最简单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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容