Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >开发中常用的JS知识点集锦

开发中常用的JS知识点集锦

作者头像
tandaxia
发布于 2018-11-21 09:45:10
发布于 2018-11-21 09:45:10
52300
代码可运行
举报
文章被收录于专栏:谈补锅谈补锅
运行总次数:0
代码可运行

1、对象的深拷贝(一级属性拷贝和多级属性嵌套拷贝)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//深拷贝函数(满足属性多级嵌套)
function deepCloneObj(sourceObj){
    var obj = (sourceObj instanceof Array) ? [] : {};
    
    for (var key in sourceObj){
        var tmp = sourceObj[key];
        
        //处理重复引用,防止死循环
        if (tmp === sourceObj){
            continue; 
        }

        if (typeof tmp === 'object'){
            obj[key] = arguments.callee(tmp); //属性为对象,递归深度复制
        }
        else{
            obj[key] = tmp;
        }
    }
    return obj;
}

//1、测试对象的深拷贝
var obj = {info:{name:'大锤'}, sign: 'xxx'};
var obj2 = Object.assign({}, obj);  //一级属性深拷贝 (es6的Object.assign函数特性)
var obj3 = {...obj};            //一级属性深拷贝 (es6扩展运算符)
var obj4 =  deepCloneObj(obj);  //递归深拷贝所有层级属性
var obj5 = JSON.parse(JSON.stringify(obj)); //深拷贝所有层级属性

console.log('obj: ', JSON.stringify(obj));
console.log('obj2: ', JSON.stringify(obj2));
console.log('obj3: ', JSON.stringify(obj3));
console.log('obj4: ', JSON.stringify(obj4));
console.log('obj5: ', JSON.stringify(obj5));
console.log(".........end..........");

setTimeout(function(){

    obj.sign = 'a**b'; 
    obj.info.name = '一二三';
    console.log('\n****update info ****');
    console.log('obj: ', JSON.stringify(obj));
    console.log('obj2: ', JSON.stringify(obj2));
    console.log('obj3: ', JSON.stringify(obj3));
    console.log('obj4: ', JSON.stringify(obj4));
    console.log('obj5: ', JSON.stringify(obj5));
    console.log(".........end..........");
},100);

/*
打印日志结果:
obj:  {"info":{"name":"大锤"},"sign":"xxx"}
obj2:  {"info":{"name":"大锤"},"sign":"xxx"}
obj3:  {"info":{"name":"大锤"},"sign":"xxx"}
obj4:  {"info":{"name":"大锤"},"sign":"xxx"}
obj5:  {"info":{"name":"大锤"},"sign":"xxx"}
.........end..........

****update info ****
obj:  {"info":{"name":"一二三"},"sign":"a**b"}   //只拷贝了第一级属性
obj2:  {"info":{"name":"一二三"},"sign":"xxx"}   //只拷贝了第一级属性
obj3:  {"info":{"name":"一二三"},"sign":"xxx"}   //只拷贝了第一级属性
obj4:  {"info":{"name":"大锤"},"sign":"xxx"}     //所有层级深拷贝
obj5:  {"info":{"name":"大锤"},"sign":"xxx"}    //所有层级深拷贝

*/


//2、测试数组的深拷贝
setTimeout(function(){
    console.log('\n\n.....数组的深拷贝测试....');
    var arr = [{name: '小明'}, true, 18];
    var arr2 = Object.assign([], arr);
    var arr3 = [...arr2];
    var arr4 = deepCloneObj(arr);
    var arr5 = JSON.parse(JSON.stringify(arr));

    console.log('arr: ', JSON.stringify(arr));
    console.log('arr2: ', JSON.stringify(arr2));
    console.log('arr3: ', JSON.stringify(arr3));
    console.log('arr4: ', JSON.stringify(arr4));
    console.log('arr5: ', JSON.stringify(arr5));
    console.log("......end......\n");

    setTimeout(function(){

        arr[0].name = '五六七', arr[1] = false, arr[2] = 99;
        console.log('arr: ', JSON.stringify(arr));
        console.log('arr2: ', JSON.stringify(arr2));
        console.log('arr3: ', JSON.stringify(arr3));
        console.log('arr4: ', JSON.stringify(arr4));
        console.log('arr5: ', JSON.stringify(arr5));

    }, 100);
    
    /*
    数组测试打印日志结果:
    .....数组的深拷贝测试....
    arr:  [{"name":"小明"},true,18]
    arr2:  [{"name":"小明"},true,18]
    arr3:  [{"name":"小明"},true,18]
    arr4:  [{"name":"小明"},true,18]
    arr5:  [{"name":"小明"},true,18]
    ......end......

    arr:  [{"name":"五六七"},false,99]
    arr2:  [{"name":"五六七"},true,18]    //只拷贝了第一级属性
    arr3:  [{"name":"五六七"},true,18]   //只拷贝了第一级属性
    arr4:  [{"name":"小明"},true,18]    //所有层级深拷贝
    arr5:  [{"name":"小明"},true,18]   //所有层级深拷贝
    */

},1000);

2、网络图片转成base64, 在线图片或文件点击下载(隐藏链接)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>
            <div onclick="clickMeDownload()">点我下载</div>
            
            <script type="text/javascript">
                /**
                 * 根据远程图片转成base64数据 (远程图片和当前页面不是同一域名时,需要进行web服务器配置,使其可以跨域下载)
                 * @param url      图片链接
                 * @param callback 回调函数
                 */
                function getBase64ByImgUrl(url, callback){
                    let canvas = document.createElement('canvas'),
                        ctx = canvas.getContext('2d'),
                        img = new Image;
                    img.crossOrigin = 'Anonymous';
                    img.onload = function(){
                        canvas.height = img.height;
                        canvas.width = img.width;
                        ctx.drawImage(img,0,0);

                        //获取base64数据
                        let base64 = canvas.toDataURL('image/png');
                        //回调
                        if (callback){
                            callback(base64);
                        }
                        canvas = null;
                    }
                    img.src = url;
                }

                /**
                 * 把base64转成文件流
                 * @param base64     base64数据
                 * @param filename   自定义文件的名字
                 */
                function getFileByBase64(base64, filename){

                    let arr = base64.split(','), mime = arr[0].match(/:(.*?);/)[1],
                        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);

                    while(n--){
                        u8arr[n] = bstr.charCodeAt(n);
                    }

                    return new File([u8arr], filename, {type:mime});
                }


                /**
                 * 测试例子:点击下载,隐藏下载链接
                 */
                function clickMeDownload(){

                    let imgUrl = 'https://img2018.cnblogs.com/blog/454511/201811/454511-20181114115022054-611805083.png';

                    getBase64ByImgUrl(imgUrl, function(base64){
                        console.log(base64);

                        //创建a标签, 设置a标签的href属性和download属性
                        var aEle = document.createElement('a');
                        aEle.setAttribute('href', base64);
                        aEle.setAttribute('download', 'temp.png');
                        aEle.style.display = 'none'; //隐藏a标签
                        document.body.appendChild(aEle);  //将a标签添加到body里
                        aEle.click();    //触发a标签点击事件

                        document.body.removeChild(aEle);  //下载图片后,移除a标签

                    });
                }
            </script>
        </div>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
故障分析 | Greenplum 数据状态异常处理
客户在巡检时,发现 Greenplum 虽然正常运行,但有些数据的状态异常。我们知道 Greenplum 的数据是存在主段和镜像段上的,当 primary 数据异常,会自动的启用 mirror 数据。当然为了保证数据的高可用,还是要及时修复异常数据。
爱可生开源社区
2022/12/07
1.1K0
故障分析 | Greenplum 集群 standby 故障处理
客户测试环境Greenplum集群中,standby节点数据目录被误删除,导致standby节点不可用。如果此时由于其它各种原因导致master节点也不可用,则集群将无法对外提供服务,因此现需尽快恢复standby节点。
爱可生开源社区
2022/12/07
9430
GreenPlum为master和segment添加镜像
在已经安装的 Greenplum DB ,给 master 节点添加 standby master 节点 。
AiDBA宝典
2023/11/18
5740
GreenPlum为master和segment添加镜像
GreenPlum 6.23.0 安装部署高配版(启用standby master和segment mirror)
可以从 Greenplum 的 GitHub 页面(https://github.com/greenplum-db/gpdb/releases)下载RPM 包,或注册并登录到 Pivotal 公司官网(https://network.pivotal.io/products/vmware-tanzu-greenplum)进行下载。
AiDBA宝典
2023/04/27
2.6K0
GreenPlum 6.23.0 安装部署高配版(启用standby master和segment mirror)
在Docker中快速体验GreenPlum 7.0.0和gpcc 7.0.0
GreenPlum 7.0.0正式版已于2023.09.29发布,基于PG 12.12内核版本。
AiDBA宝典
2023/11/16
9570
在Docker中快速体验GreenPlum 7.0.0和gpcc 7.0.0
Greenplum中检测和恢复故障的master实例
greenplum整个集群是由多台服务器组合而成,任何一台服务都有可能发生软件或硬件故障,我们一起来模拟一下任何一个节点或服务器故障后,greenplumn的容错及恢复方法.
AiDBA宝典
2023/04/27
2K0
Greenplum中检测和恢复故障的master实例
在CentOS 8.4中安装GreenPlum 6
https://network.pivotal.io/products/vmware-tanzu-greenplum#/releases/1163282/file_groups/9837
AiDBA宝典
2023/11/22
1.2K0
在CentOS 8.4中安装GreenPlum 6
GreenPlum 6.19.3 安装部署基础版
Greenplum是一个面向数据仓库应用的关系型数据库,因为有良好的体系结构,所以在数据存储、高并发、高可用、线性扩展、反应速度、易用性和性价比等方面有非常明显的优势。Greenplum是一种基于PostgreSQL的分布式数据库,其采用sharednothing架构,主机、操作系统、内存、存储都是自我控制的,不存在共享。 本质上讲Greenplum是一个关系型数据库集群,它实际上是由数个独立的数据库服务组合成的逻辑数据库。与RAC不同,这种数据库集群采取的是MPP(Massively Parallel Processing)架构。跟MySQL、Oracle 等关系型数据不同,Greenplum可以理解为分布式关系型数据库。 关于Greenplum的更多信息请访问https://greenplum.org/
AiDBA宝典
2023/04/27
1.7K0
GreenPlum 6.19.3 安装部署基础版
在Docker中快速体验GreenPlum 6.23.1和gpcc监控工具
环境配置 地址:https://hub.docker.com/repository/docker/lhrbest/greenplum_gpcc/tags?page=1&ordering=last_up
AiDBA宝典
2023/04/27
7260
在Docker中快速体验GreenPlum 6.23.1和gpcc监控工具
Snova运维篇(二):GP集群配置和高可用特性
Greenplum数据的配置文件postgresql.conf位于数据库实例的数据目录之下。
snova-最佳实践
2019/12/24
1.4K0
Snova运维篇(二):GP集群配置和高可用特性
在Docker中快速体验GreenPlum 7.0.0
地址:https://hub.docker.com/r/lhrbest/greenplum/tags
AiDBA宝典
2023/08/10
1.3K0
在Docker中快速体验GreenPlum 7.0.0
GP 5.16.0 故障实验
内容接上一篇文章(https://blog.51cto.com/lee90/2371858),本文的实验拓扑等各种架构都和上一篇一致。
保持热爱奔赴山海
2019/09/17
9790
GP 5.16.0 故障实验
GreenPlum数据库故障恢复测试
环境介绍: Gpdb版本:5.5.0 二进制版本 操作系统版本: CentOS linux 7.0 Master segment: 192.168.1.225/24 hostname: mfsmaster Stadnby segemnt: 192.168.1.227/24 hostname: server227 Segment 节点1: 192.168.1.227/24 hostname: server227 Segment 节点2: 192.168.1.17/24 hostname: server17 Segment 节点3: 192.168.1.11/24 hostname: server11 每个segment节点上分别运行一个primary segment和一个mirror segment
星哥玩云
2022/08/16
8600
GreenPlum数据库故障恢复测试
Greenplum集群Master与Standby相互切换
本文档主要测试Greenplum集群的Master与Standby节点异常后数据同步问题,之相互切换的过程。在操作时通过手动停掉Master节点看Standby节点是否能正常的启动,期间是否有数据不同步的问题,再通过恢复原Master节点查看集群是否正常运行。在切换期间要注意Master与Standby脑裂的情况的发生。
小徐
2020/10/19
2.5K0
Greenplum集群Master与Standby相互切换
Greenplum异常节点恢复,屋漏偏逢连夜雨?
> 单位内的一套greenplum集群出现了一点小问题:其中一台segment节点的主镜像出错,mirror镜像自动升级成了primary;另外一个节点提示数据库PID不存在,但是各功能都正常。今天就记录一下我们的修复过程。`(部分内容做了脱敏处理,显示会不完整)`
运维牛马
2025/03/24
810
GreenPlum管理数据库
在后备Master主机上,移动或者移除数据目录gpseg-1。这个例子移动该目录:
AiDBA宝典
2023/11/16
4100
GreenPlum管理数据库
Greenplum集群故障修复小记
今天有一套环境因为网络调整,结果诺大的Greenplum集群,primary和mirror节点部分有了故障,假设有200个实例,100个segment,100个mirror,情况就是100个实例出现了问题(可能mirror已经宕机,可能mirror切换为primary,可能primary切换为mirror)刚好保证了100个实例能够正常承接业务。
jeanron100
2018/07/26
1.3K0
Greenplum集群故障修复小记
Snova运维篇(七):GP数据迁移和监控
gptransfer会为每个源Segment设置一个命名管道和一个gpfdist进程。这是用于最优数据传输率的配置并且被称为Fast模式。
snova-最佳实践
2019/12/27
2.3K0
Snova运维篇(七):GP数据迁移和监控
Greenplum使用gpstate查看数据库系统的状态
gpstate工具显示有关正在运行的Greenplum数据库实例的信息。 由于Greenplum数据库系统由跨多台机器的多个PostgreSQL数据库实例(Segment)组成, 因此用户可能需要了解关于Greenplum数据库系统的额外信息。gpstate 工具为Greenplum数据库系统提供了额外的状态信息,例如:
AiDBA宝典
2023/04/27
1.2K0
Greenplum使用gpstate查看数据库系统的状态
Greenplum版本升级及小版本升级示例
需要注意的是,gpupgrade 可以进行滚动升级,即升级过程不需要在整个集群中同时执行,而是逐个段进行升级。此外,如果在升级过程中出现任何问题,请参阅 gpupgrade 文档中提供的解决方案,或者向 Greenplum 社区寻求支持。
AiDBA宝典
2023/04/27
3.1K0
Greenplum版本升级及小版本升级示例
相关推荐
故障分析 | Greenplum 数据状态异常处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验