Js对象(四)对象与字符串相互转换 2021-11-24

JavaScript024

Js对象(四)对象与字符串相互转换 2021-11-24,第1张

在实际开发中我们经常需要将对象转为字符串来传递数据,传递完毕后再以对象的方式显示,所以必须掌握相互转换的方法

一、将对象转为字符串:

 let obj = {

        name: "小米10",

        color: '红色',

        size: '1000*200*500',

        price: '2999'

    }

    // 1. 获取对象的两种方式:

    // console.log(obj.name)

    // console.log(obj['name'])

    // 2.遍历对象

    // 2.1  for in  遍历对象

    // for(变量  in  对象){

    // }

    for (let key in obj) { //for in 里面的变量喜欢用key

        console.log(key)// key 变量 输出得到是属性值

        // console.log(obj[k])//得到里面的属性值

        // console.log(k + '--' + obj[k])

    }

    // 2.2  ES6中新增的获取对象的所有属性方法  

    // Object.keys()  返回对象的所有属性名 是个数组

    console.log(Object.keys(obj))//['name', 'color', 'size', 'price']

    Object.keys(obj).forEach(key =>{

            console.log(key + '--' + obj[key])

        })

        // Object.values返回对象的所有属性值 是个数组

    console.log(Object.values(obj))

    console.log('*'.repeat(30))

    // 3.两种方法转换为字符串

    //方法一

    let arr1 = [] //先声明空数组,再将空数组转换为字符串

    for (let key in obj) {

        arr1.push(key + '=' + obj[key]) // 声明空数组接收对象转换后的数组

    }

    console.log(arr1.join('&'))//也可以声明一个字符串去接

    // 方法二

    // 先找到数组里面所有的属性名,然后用map修改属性

    let str2 = Object.keys(obj).map(key =>[key, obj[key]].join('=')).join('&')

    console.log(str2)

二、将字符串转为对象

 let str = 'name=刘德华&age=18&sex=男'

        let obj = {}

        // split将字符串按照指定字符转为数组,forEach再遍历数组

        str.split('&').forEach(r =>{

            let arr = r.split('=')//然后再用split按等号将数组拼成新数组

            obj[arr[0]] = arr[1]//再给对象赋值 arr[0]是属性。arr[1]是值

        })

        console.log(obj)

toString()

使用对象的toString函数把对象转化为字符串。

// plain object

var obj = {}

obj.toString() // 返回"[object Object]" // 基本数据封装类

var num = new Number(2.2)

num.toString() // 返回"2.2" // 数组

var arr = [1,2,3]

arr.toString() // 返回"1,2,3" // 正则对象

var reg = new RegExp('\\d')

reg.toString() // 返回"/\d/" // 自定义对象

function Person(name, age) {

    this.name = name

    this.age = age

}

Person.prototype.toString = function () {

    return 'name is ' + this.name + 'and age is ' + this.age

}

var p = new Person('Scott', 31)

p.toString() // 返回"name is Scott and age is 31"

JSON.stringify

使用json序列化的方式把对象转换为字符串,该方式会把一个对象中所有标记为

enumerable的属性序列化为json格式的字符串。

// plain object

var obj = {name: 'Scott', age: 31}

JSON.stringify(obj) // 返回"{"name":"Scott","age":31}" // 基本数据封装类

var num = new Number(2.2)

JSON.stringify(num) // 返回"2.2" // 数组

var arr = [1,2,3]

JSON.stringify(arr) // 返回"[1,2,3]" // 自定义类型

function Person(name, age, maritalStatus) {

    this.name = name

    this.age = age

    // 由于婚姻状况是隐私的属性,不希望序列化字符串的时候暴露给他人,因此这里设置属性为不可枚举的

    Object.defineProperty(this, 'maritalStatus', {

        enumerable: false,

        configurable: false,

        writable: true,

        value: maritalState || 'unknown'

    })

    this.maritalStatus = maritalStatus

}

var p = new Person('Scott', 31, 'married')

// 序列化的时候是没有maritalStatus的

JSON.stringify(p) // 返回"{"name":"Scott","age":31}"

// 但是maritalStatus确实真实存在于对象中的

p.maritalStatus // 返回"married"

转换方式有两种:1、利用原生JSON对象,将对象转为字符串:参考代码如下:var jsObj = {}//定义objectjsObj.testArray = [1,2,3,4,5]//初始化jsObj.name = 'CSS3'jsObj.date = '8 May, 2011'var str = JSON.stringify(jsObj)//转换成stringalert(str) //弹出提示2、重写toString()方法:参考代码如下:Dog.prototype.toString = function dogToString() { var ret = 'Dog ' + this.name + ' is a ' + this.sex + ' ' + this.color + ' ' + this.breed return ret}