三、标准对象

在JavaScript的世界里,一切都是对象。但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串。如:

typeof 123; // 'number'

typeof NaN; // 'number'

typeof 'str'; // 'string'

typeof true; // 'boolean'

typeof undefined; // 'undefined'

typeof Math.abs; // 'function'

typeof null; // 'object'

typeof []; // 'object'

typeof {}; // 'object'

可见,number、string、boolean、function和undefined有别于其他类型。特别注意null的类型是object,Array的类型也是object,如果我们用typeof将无法区分出null、Array和通常意义上的object——{}。

1、一些类型使用规则:

(1)用parseInt()或parseFloat()来转换任意类型到number;

(2)用String()来转换任意类型到string,或者直接调用某个对象的toString()方法。需要注意,null和undefined没有toString()方法,而number调用它也会报错,所以还是别用toString了

(3)typeof操作符可以判断出number、boolean、string、function和undefined,其余的都是object类

(4)判断Array要使用Array.isArray(arr);

(5)判断null请使用myVar === null;

(6)判断某个全局变量是否存在用typeof window.myVar === 'undefined';

(7)函数内部判断某个变量是否存在用typeof myVar === 'undefined'

2、Date对象用来表示日期和时间,如:

var now = new Date();

now; // Wed Jun 24 2015 19:49:22 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)JavaScript的Date对象月份值从0开始,牢记0=1月,1=2月,2=3月,……,11=12月

(2)now.toLocaleString():本地时间

(3)new.toUTCString():UTC时间

(4)时间戳:一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数

3、RegExp:正则表达式

4、在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。

(1)对象序列化为JSON:JSON.stringify(xiaoming, null, '  ')。注意,第三个参数是为了好看而传入了缩进

(2)第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array,如JSON.stringify(xiaoming, ['name', 'skills'], '  ');

(3)第二个参数还可以传入一个函数,这样对象的每个键值对都会被函数先处理,如:

function convert(key, value) {

    if (typeof value === 'string') {

        return value.toUpperCase();

    }

    return value;

}

JSON.stringify(xiaoming, convert, '  ');

结果所有属性值都变成了大写。

(4)如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:

var xiaoming = {

    name: '小明',

    age: 14,

    gender: true,

    height: 1.65,

    grade: null,

    'middle-school': '\"W3C\" Middle School',

    skills: ['JavaScript', 'Java', 'Python', 'Lisp'],

    toJSON: function () {

        return { // 只输出name和age,并且改变了key:

            'Name': this.name,

            'Age': this.age

        };

    }

};

JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'

(5)JSON.parse():将JSON字符串反序列化为一个js对象,如:

JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]

JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}

JSON.parse('true'); // true

JSON.parse('123.45'); // 123.45

(6)JSON.parse()还可以接收一个函数,用来转换解析出的属性,如:

var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {

    if (key === 'name') {

        return value + '同学';

    }

    return value;

});

console.log(JSON.stringify(obj)); // {name: '小明同学', age: 14}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 本文是在学习廖雪峰先生的JavaScrip教程 后的归纳 一、标准对象 typeofJavaScript的世...
    ting723阅读 330评论 0 2
  • 2.包装对象 4.json 4.1.序列化 4.2.反序列化
    wyude阅读 278评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,201评论 0 13
  • 冬叹 清晨从梦中醒来 听见窗外已是春天 轻罗长衫垒枕边 禁不起清风一阵长叹 昨夜煮雪对明月 一夕红尘扫过 ...
    欣雅_47ff阅读 323评论 0 2
  • 那一年是2012年,14岁的我因为中考失利不得不踏上打工的旅途,那时的我对于社会对于人性对于朋友丝毫不了解。...
    我是个帅气小伙阅读 342评论 0 1