JavaScript学习笔记-4(标准对象)

JavaScript学习笔记-(标准对象)


标准对象

我们用typeof操作符获取对象的类型,它总是返回一个字符串:

console.log(typeof NaN);// 'number'
console.log(typeof 'str');// 'string'
console.log(typeof true); // 'boolean'
console.log(typeof undefined);// 'undefined'
console.log(typeof Math.abs);// 'function'
console.log(typeof null);// 'object'
console.log(typeof []); // 'object'
console.log(typeof {}); // 'object'

1.包装对象

number、boolean和string都有包装对象。没错,在JavaScript中,字符串也区分string类型和它的包装类型。包装对象用new创建:

var a = new Number(123); // 123,生成了新的包装类型
console.log(a);//[Number: 123]
console.log(typeof a);//object
console.log(typeof 1234);//number
console.log('\n');

var b = new Boolean(true); // true,生成了新的包装类型
console.log(b);//[Boolean: true]
console.log(typeof b);//object
console.log(typeof true);//boolean
console.log('\n');

var c = new String('str'); // 'str',生成了新的包装类型
console.log(c);//[String: 'str']
console.log(typeof c);//object
console.log(typeof 'str');//string
console.log('\n');

//包装后类型变为object所以,包装对象和原始值用===比较会返回false
if (a===123){console.log('一样'); }else{console.log('不一样');};//不一样

一般不要使用包装对象!
此时,Number()、Boolean和String()被当做普通函数,把任何类型的数据转换为number、boolean和string类型(注意不是其包装类型)

var n = Number('123'); // 123,相当于parseInt()或parseFloat()
console.log(typeof n);//number

var n1 = String(123);
console.log(typeof n1);//string

注意点

  • 不要使用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'。
`转成string`
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'

===============================================

2.Date

Date对象用来表示日期和时间

//当前时间是浏览器从本机操作系统获取的时间,所以不一定准确
var now = new Date();
now; // Tue Aug 30 2016 14:36:44 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月
now.getDate(); // 24, 表示24号
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小时制
now.getMinutes(); // 49, 分钟
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳
[1]时间的创建

1.使用Date()函数创建

var d = new Date(2015, 5, 19, 20, 15, 30, 123);
console.log(d);//Fri Jun 19 2015 20:15:30 GMT+0800 (CST)
注意创建的时候5就是5月,和获取的时候不一样

2.创建一个指定日期和时间的方法是解析一个符合ISO8601格式的字符串创建

var d = Date.parse('2015-12-24T19:49:22.875+08:00');
console.log(d);//是个时间戳1450957762875

var nomalTime = new Date(d);//时间戳转换成Date
console.log(nomalTime);

[2]时区

Date对象表示的时间总是按浏览器所在时区显示的,不过我们既可以显示本地时间,也可以显示调整后的UTC时间

var d = new Date(1435146562875);
console.log(d.toLocaleString());//6/24/2015, 7:49:22 PM   本地时间,显示的字符串与操作系统设定的格式有关
console.log(d.toUTCString()); // Wed, 24 Jun 2015 11:49:22 GMT

获取当前时间戳

if (Date.now) {
    alert(Date.now()); // 老版本没有now()方法
} else {
    alert(new Date().getTime());
}

3.RegExp

正则表达
\d可以匹配一个数字
\w可以匹配一个字母或数字
\s可以匹配一个空格(也包括Tab等空白符)
.可以匹配任意字符
\转义特殊字符
^表示行的开头,(举个栗子^\d表示必须以数字开头)
$表示行的结束,(举个栗子\d$表示必须以数字结束)
[]表示范围

*表示任意个字符(包括0个)
+表示至少一个字符
?表示0个或1个字符
{n}表示n个字符,
{n,m}表示n-m个字符

JavaScript有两种方式创建一个正则表达式

1.直接通过/正则表达式/写出来
var re0 = /ABC\-001/;
var isOrNo = re0.test('ABC-001');
console.log(isOrNo);// true
2.new RegExp('正则表达式')创建一个RegExp对象
var re1 = new RegExp('ABC\\-001');//有两个`\`是因为JS中转义字符和正则表达式中的转义`\`
var isOrNo = re1.test('ABC-00');
console.log(isOrNo);// false
3.切分字符串
console.log('a b   c'.split(' '));//[ 'a', 'b', '', '', 'c' ]
console.log('a b   c'.split(/\s+/));//[ 'a', 'b', 'c' ]
4.分组
//正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。
var re = /^(\d{3})-(\d{3,8})$/;
var a = re.exec('010-12345'); // ['010-12345', '010', '12345']
console.log(a);//[ '010-12345', '010', '12345', index: 0, input: '010-12345' ]

var b = re.exec('010 12345'); // null
console.log(b);//null
5.贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0

var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']
由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。
必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:
var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']
6.全局搜索

JavaScript的正则表达式还有几个特殊的标志,最常用的是g,表示全局匹配:
全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引

var s = 'JavaScript, VBScript, JScript and ECMAScript';
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,直到结束仍没有匹配到

4.JSON

在JSON中,一共就这么几种数据类型,以及任意组合

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的true或false;
  • string:就是JavaScript的string;
  • null:就是JavaScript的null;
  • array:就是JavaScript的Array表示方式——[];
  • object:就是JavaScript的{ ... }表示方式。
1.序列化(对象序列化成JSON格式的字符串)
function convert(key, value) {
    if (typeof value === 'string') {
        return value.toUpperCase();
    }
    return value;
}

var aDog = {
    name: '单身狗',
    age: '保密',
    tags: ['性格好', '知书达理','😂','自己脸都红了'],
    city: 'Shanghai',
    form: '江苏',
    hasCar: false,
    zipcode: null,
    fingers:20,
    'ha-ha':"^_^"
};
>1. console.log(JSON.stringify(aDog));//{"name":"单身狗","age":"保密","tags":["性格好","知书达理","😂","自己脸都红了"],"city":"Shanghai","form":"江苏","hasCar":false,"zipcode":null,"fingers":20,"ha-ha":"^_^"}
>2. console.log(JSON.stringify(aDog,null,' '));//会好看点,传null
>3. console.log(JSON.stringify(aDog,['tags','age'],' '));//只想输出指定的属性tags age,传Arry
>4. console.log(JSON.stringify(aDog, convert, '  '));//如果key是string类型全部大写,传函数
>5. 如果想精确控制如何序列化(对象)aDog定义一个toJSON()的方法
var aDog = {
    name: '单身狗',
    age: '保密',
    tags: ['性格好', '知书达理','😂','自己脸都红了'],
    city: 'Shanghai',
    form: '江苏',
    hasCar: false,
    zipcode: null,
    fingers:20,
    'ha-ha':"^_^",
    toJSON:function(){
      return {
            'name': this.name//只输出name
        };
    }
};
console.log(JSON.stringify(aDog));//{"name":"单身狗"}
2.反序列化(JSON格式的字符串转成Js对象)
console.log(JSON.parse('[1,2,3,true]'));// [1, 2, 3, true]
console.log(JSON.parse('{"name":"小明","age":14}')); // Object {name: '小明', age: 14}
console.log(JSON.parse('true'));// true
console.log(JSON.parse('123.45')); // 123.45
>1. 直接使用JSON.parse()函数
>2. JSON.parse()还可以接收一个函数,用来转换解析出的属性
JSON.parse('{"name":"小明","age":14}', function (key, value) {
    // 把number * 2:
    if (key === 'age') {
        return value + 30;
    }
    return value;
}); // Object { name: '小明', age: 44 }

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

推荐阅读更多精彩内容