从零开始学前端:json对象,对象的序列化和反序列化 --- 今天你学习了吗?(JS:Day16)

news2024/10/5 16:23:55

从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)

复习:从零开始学前端:购物车和鲜花价格排序 — 今天你学习了吗?(JS:Day15)

文章目录

  • 从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)
    • 前言
    • 第十三节课:json对象,对象的序列化和反序列化
      • 一、json对象
        • 1.定义方式
        • 2. json中增删改查属性
        • 3. 查找对象中是否有某个属性
        • 4. 检测对象是否有某个属性,用in
        • 5. 命名方面
      • 二、对象的序列化和反序列化
      • 三、拷贝对象
      • 四、call,apply,bind

前言

第十三节课:json对象,对象的序列化和反序列化

一、json对象

1.定义方式

    var json1 = {};//字面量 或 直接量;
    var json2 = new Object();//通过底层的构造函数Obj加new来执行;必须用关键字来执行。console.log(obj1 ) 输出 -> {} ;里面没有属性。obj1.name = 'candy';
    var json3 = Object.create( {} );这种方式也能创建一个对象,过程会复杂些。这里是依照一个对象来创建另外一个对象;这里生成对象的时候,有一些选项。比如你这条属性可否被遍历、被循环、被删除、被修改,

定义:

除了在JS中用来记录数据外,还可以与后台进行数据交互,这个时候我们通常把这个对象叫做JSON对象。如果不是用来与后台进行交互,叫做对象也是可以的。

注意:
1.如果作为Json与后台进行数据交换,所有的数据的属性名跟属性值都必须为字符串。而且为双引号的字符串,
不可以为单引号。

var obj = {
	name : 'candy' ,
	age : 18 ,
	lenth : 18
}

2.在其它语言中,双引号引起来的都为字符串,但是单引号的是不一定的。
3.在Js中,不管你用单引号还是双引号都没有什么区别。
4.如果只作用于前端,那么是单引号或双引号都可以。

2. json中增删改查属性

json中增加属性

        var json = {
            "name": 'Coisini',
            age: 18,
            house: 5,
            car: 3
        };

        // 增加
        json.gf = '哥哥'
        console.log(json)

效果:
在这里插入图片描述

json中删除属性

        var json = {
            "name": 'Coisini',
            age: 18,
            house: 5,
            car: 3
        };

        // 增加
        json.gf = '哥哥'
        console.log(json)

        // 删除
        delete json.age;
        console.log(json)
        //可以用中括号[]来代替点操作
        delete json['house'];
        console.log(json)

效果:
在这里插入图片描述

json中修改属性

        var json = {
            "name": 'Coisini',
            age: 18,
            house: 5,
            car: 3
        };

        // 增加
        json.gf = '哥哥'
        console.log(json)

        // 删除
        delete json.age;
        console.log(json)

        // 改
        json.name = '甜柚';
        console.log(json)

效果:
在这里插入图片描述

json中查找属性

        var json = {
            "name": 'Coisini',
            age: 18,
            house: 5,
            car: 3
        };

        // 增加
        json.gf = '哥哥'
        console.log(json)

        // 删除
        delete json.age;
        console.log(json)

        // 改
        json.name = '甜柚';
        console.log(json)
        //  查
        console.log(json)

效果:
在这里插入图片描述

3. 查找对象中是否有某个属性

//错误做法:
        var json = {
            "name": 'Coisini',
            age: 18,
            house: 5,
            car: 3,
            hobby: undefined,
        };
        //这里的json.hobby返回出来的值为''(空字符串),所以判断不成立;
        if (json.hobby) {
            console.log("存在")
        } else {
            console.log("不存在")
        }
        //检测:in(关键字):用来判断某个对象是否存在某条属性;

效果:
在这里插入图片描述

4. 检测对象是否有某个属性,用in

        // 检测对象是否有某个属性,用in;
        //注意:这里的属性要使用字符串引起来,不然会被当成变量。
        if ("hobby" in json) {
            console.log("存在")
        } else {
            console.log("不存在")
        }
        console.log("house" in json ? "存在" : "不存在")
        console.log("酒" in json ? "存在" : "不存在")
        //不管为真值还是为假值,只要在对象里面,就能检测到。

效果:
在这里插入图片描述

5. 命名方面

//与变量名大致相似,区别在于对象的属性名可以使用数字。
var obj = {
	0 : 'candy';
	1 : null;
};
/*
但是不能用.操作来操作样式只能通过中括号来操作;
console.log( obj['1'] );如果为数字的时候,可以直接写不用加引号;
*/

二、对象的序列化和反序列化

		//把这个数据作为对象传送到后台,都需要加上引号;一个严格的JSON对象的属性和属性值都应该加上引号的。
        var json = {
            "name": 'Coisini',
            age: 18,
            house: 5,
            car: 3,
            hobby: "undefined",
        };
		//以上不可以作为对象传送给后台,因为没有加上双引号;
		//如果不确定是否有加上双引号的时候,如果没有加上双引号的时候,那么就无法传送数据。所以需要对象进行数列化与反序列化。

        // 前后端交互的时候,大部分数据都是以字符串存在的,需要做转化;
        console.log(JSON)

		//序列化: 把不标准的Json对象变成标准的Json对象,就是给每个属性加上双引号。
        //将数组进行序列化,传一个不标准json对象返回一个新的对象;
        var str = JSON.stringify(json);//将数组进行序列化
        console.log(str)//标准的字符串

		//序列化的结果:JSON格式的字符串;
		console.log( json.name ); //已经访问不到对应的结果.

        //把一个JSON对象的字符串反序列化为一个对象:
        //将后端传过来的数据进行反序列化
        var json2 = JSON.parse(str);
        console.log(json2)//输出一个对象;

效果:
在这里插入图片描述

三、拷贝对象

        var obj = {
            name: 'candy',
            age: '18',
        }
        var obj1 = obj;
        obj1.sex = 'man';
        console.log(obj1);
        console.log(obj);
        /*
            1.兼容性问题
                基本上所有的引用类型返回obj的都是应用数据类型;
        */

        //加了一条属性,这里面由于它们两个应用的是同一个对象,所以都指向同一个obj对象。

        //1. 对象如何进行复制:
        var obj1 = JSON.parse(JSON.stringify(obj));
        console.log(obj1);

        /*
            序列化的结果:返回一个跟obj1一模一样的对象;
            1. 在自己身上扩展的时候不会影响原先的样式。
            2. 先通过序列化stringify先返回字符串,再通过反序列化的parse把一个字符串返回为对象,这个时候返回一个新的和原先obj一模一样的对象。
            3. 当返回一个新的对象会在内存空间开辟另一块地址来保存对象,而对象指向原先对象。
        */

注意:在进行序列化的时候会忽略掉函数,会把函数过滤。

四、call,apply,bind

        /*
            函数里面关键词this.
        */

        //this指向事件源:

        var arr = [1];
        function fn() {
            console.log(this);
        }
        document.onclick = fn;

        //改变this的指向;
        document.onclick = fn.call(arr); //会主动执行!
        document.onclick = fn.bind(arr); //bind会主动执行!

        //如需要bind主动执行,需要加括号!
        fn.bind(arr)();

        /*
            1. call(this指向的对象,arg1,arg2...)
            2. apply(this指向的对象,[arr1,arr2]),apply指向对象必须作为数组的内容;
            3. bind: (不会主动执行函数,arr1,arr2...)
        */

预习:从零开始学前端:定时器,回调函数,math对象 — 今天你学习了吗?(JS:Day17)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM基础

JVM简介 JVM是java虚拟机简称,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际计算机上仿真模拟各种计算机功能来实现的。也正式因为有了它,java才具有了跨平台特性,”一次编译,到处运…

隐私计算行业应用情况和标准化现状

开放隐私计算 2022-11-16 19:17 发表于浙江 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的…

如何利用快解析实现个人私有云

个人云盘曾火爆一时,原因有二,一是国内可选择的网盘越来越少,自建网盘无疑是一个不错的选项,毕竟网盘是数据存在别人那,始终让人心里不安,如同车辆一样,云盘就是公交车,私有云盘就是…

Matlab:在文本和值之间转换datetimeduration

Matlab:在文本和值之间转换datetimeduration将值转换为文本datetimeduration将数组转换为字符串数组指定输出文本的格式指定输出文本的区域设置将文本转换为值datetime解释输入文本的格式将文本转换为值duration解释输入文本的格式从文件中读取日期和时间此示例演示…

面试经常问的Linux进程到底是什么呢?1W字从0到1详解进程的所有细节!

目录 1.冯诺伊曼体系 2.操作系统 3.进程 4.进程的三种状态 4.1概念 4.2Linux中不同进程状态 5.进程的优先级 6.进程的几个其它概念 7.进程的切换 8.环境变量 8.1环境变量的概念 8.2常见的环境变量 8.3和环境变量相关的命令 8.4查看环境变量的方法 8.5通过代码获取环境变量的方式…

微信小程序 webview组件内嵌H5二维码识别

结果 支持公众号二维码支持小程序码支持个人名片支持群聊不支持页面二维码 做法 点击图片触发previewImage预览&#xff0c;长按识别 <script type"text/javascript" src"https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>wx.p…

IT部门不想每天忙“取数”,花了几百万买系统,还是这个办法有效

待过几年中小型传统企业的应该都有这个感知&#xff1a;虽然每个月都在采购新的软件系统&#xff0c;但整个公司的数字化仍旧一团糟&#xff0c;数字化转型是越搞越回去了。 这也很好解释。 传统企业业务部门繁多&#xff0c;在搞信息化阶段采购了很多业务系统&#xff0c;比…

C++ 11

文章目录1. 列表初始化1.1 列表初始化的使用格式1.1.1 内置类型1.1.2 自定义类型的列表初始化1.2 列表初始化的本质2. 变量类型的推导2.1 auto 关键字2.2 decltype类型推导3. 范围for4. final与override5. 智能指针6. 新增容器6.1 静态数组array6.2 单向链表 forward_list6.3 u…

【问卷调查发布系统的设计与实现】

系列文章目录 在当前社会&#xff0c;随着信息化的高速发展&#xff0c;收集数据的传统方法——问卷调查法也在发生改变。此问卷调查系统&#xff0c;可以帮助用户在短时间内创建收集数据的问卷&#xff0c;目的是突出高效性、绿色性以及便捷性。在设计过程中&#xff0c;分析…

web网页设计期末课程大作业:漫画网站设计——我的英雄(5页)学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

Charles使用教程

目录预备知识1.HTTP调试代理工具原理2.Charles简介实验目的实验环境实验步骤一实验步骤二实验步骤三预备知识 1.HTTP调试代理工具原理 HTTP调试代理工具广泛应用于web程序开发、安全测试、流量分析等工作。HTTP调试代理工具工作于TCP/IP参考模型中的应用层&#xff0c;浏览器…

Docker容器的5个实用案例

Docker 是一个开源平台&#xff0c;可以轻松地为任何应用创建一个轻量级的、 可移植的、自给自足的容器。大多数 Docker 容器的核心是在虚拟化环境中运行的轻量级 Linux 服务器。 Docker Linux 容器有什么实际用例吗&#xff1f;现在让我们一探究竟。 为什么使用 Docker? D…

力扣(LeetCode)792. 匹配子序列的单词数(C++)

二分查找 直观思考&#xff0c;本题可以将 wordswordswords 中每个单词 wordwordword 依次和目标字符串 sss 比较&#xff0c;检查是否为子串。时间复杂度 n∑i0m−1wordsin\times \sum_{i0}^{m-1}words_in∑i0m−1​wordsi​ nnn 是 sss 的长度, mmm 是 wordswordswords 的长…

壁纸号的玩法,拿出来收费未免也太坑人了,所以,直接上教程。

网上关于斗音变现的攻略写得比较少&#xff0c;可以理解为目前仍是风口&#xff0c;都在闷声发大财&#xff0c;虽然我也做知识付费&#xff0c;但是这壁纸号的玩法&#xff0c;拿出来收费未免也太坑人了…… 所以&#xff0c;直接上教程…… 一、准备斗音号 这一块不用多说&…

数据结构之实现队列

文章目录前言1.队列的相关介绍1.队列的定义2.队列的实现方式2.队列具体实现1.队列声明定义2.队列的接口1.初始化接口2.数据的插入和删除3.获取队头元素和队尾元素4.获取队列元素个数和队列判空以及队列3.总结前言 之前谈到了栈的实现&#xff0c;现在来说说另一种数据结构——…

[hadoop全分布部署]虚拟机Hadoop集群配置/etc/hosts、配置无密码登录(SSH)

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;虚拟机Hadoop集群配置/etc/hosts…

Centos 7下安装php+mysql+nginx+wordpress教程新版

安装zsh+oh-my-zsh 安装zsh的原因是因为不喜欢自带的ssh工具,感觉没有这个好用,我最常用的就是记忆功能,比如输入某个字母,按上下键会自动补全已经使用过的命令,安装也很简单,一条命令搞定,他的扩展也很多,这里只讲最简单的安装,当然也可以不需要安装。 执行yum inst…

Linux基本指令

这一章我们将讲解在Linux系统下&#xff0c;一些基本指令的用法和功能. 后面有一些重要的指令我们将单独讲解. 目录 ls 指令 pwd 指令 cd 指令 touch 指令 mkdir 指令★ rmdir 指令 && rm指令★ man 指令★ cp 指令 ★ mv 指令★ cat && tac指令 e…

nodejs+vue毕业生就业知道信息平台系统

大学毕业生招聘系统分三个身份登录&#xff0c;一个学生&#xff0c;一个管理员&#xff0c;一个是企业用户。学生可以注册登录管理自己的简历,应聘职位,企业用户可以发布招聘&#xff0c;收到应聘信息,查看学生简历,收藏学生简历,而管理员可以修改任何信息。 管理员模块有: 1.…

【8-数据库表结构的创建后台管理系统的搭建】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…