180325 对象

RTAB-Map实战:用RGB-D相机5步搞定机器人自主建图(附避坑指南) 本文提供了一份详细的RTAB-Map实战指南,通过5个核心步骤,指导用户使用RGB-D相机(如Intel RealSense D435i)快速实现机器人自主建图。内容涵盖环境准备、传感器启动、核心参数配置、实战调优及地图后处理,并重点解析了算法关键参数与常见避坑方案,旨在帮助初学者高效搭建鲁棒的视觉SLAM系统。 阅读详情

概述

  • 对象可以看做是属性的无序集合,每个属性都是一个名值对。 属性名是字符串,可以把对象看成是从字符 串到值的映射。
    除了可以保持自己的属性,JS对象还可以从一个称为原型的对象继承属性。这种‘’原型式继承‘’是JS的核心 特征。

  • 对象是可变的,我们通过引用而非值来操作对象。如果变量x指向一个对象的引用,那么执行代码var y = x
    ;变量y也是指向同一个对象的引用,而非这个对象的副本。通过变量y来修改这个对象亦会对变量x造成影 响。

属性特性:

  • 可写:是否可以设置属性值

  • 可枚举:是否可以通过for/in循环来返回该属性

  • 可配置:是否可以删除或修改该属性

对象特性:

  • 原型:指向另一个对象,本对象的属性继承自它的原型对象。

  • 类:是一个标识对象类型的字符串。

  • 扩展标记:指明是否可以向该对象添加新属性。

内置对象:是由ES规范定义的对象或类。例如数组、函数、日期和正则表达式。

宿主对象:是有JS解释器所嵌入的宿主环境(比如浏览器)定义的。客户端JS中表示网页结构的HTMLElement 对象均是宿主对象。

自定义对象:由运行中的JS代码创建的对象。

自有属性:直接在对象中定义的属性。

继承属性:在对象的原型对象中定义的属性。


创建对象

  • 对象直接量

属性名可以是JS标识符也可以是字符串直接量。
属性的值可以是任意JS表达式或值。

var empty = {};
var point = {x: 0,y: 0};
var point1 = {x: point.x,y: point.y + 1};
var book = {
    "main title": "JavaScript",//属性名中有空格必须用字符串表示     
    'sub-title': "The Definitive Guide",//属性名中有连字符必须用引号     
     "for": "all audience",     
     author:{         
         firstname:"David",
         surname:"Flangan"         
     }  
};
  • 通过new创建对象

new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用。这里的函数称作构造函数。构造函数用 以初始化一个新创建的对象。JS语言核心中的原始类型都包含内置构造函数。

var o = new Object();
var a = new Array();
var d = new Date();
var r = new RegExp('js');
  • 原型

每一个对象(null除外)都和另一个对象相关联。
所有通过对象直接量创建的对象都具有同一个原型对象,并可以通过JS代码Object.prototype获得对原型对象的 引用。
通过关键字new和构造函数调用创建的对象的原型,就是对应构造函数的prototype属性的值(某一个对象)。
例如,通过new Array() 创建的对象的原型就是Array.prototype。
Object.prototype没有原型。

  • Object.create(对象原型,)

这是一个静态函数,不提供给某个对象调用。

var o = Object.create({x:1,y:2}); // o继承了属性x和y

可以通过传入参数null创建一个没有原型的新对象,甚至没有基础方法。

var o = Object.create(null);//不继承任何属性和方法

想创建一个普通对象(通过{}或new Object()),需要传入Object.prototype:

var o = Object.create(Object.prototype);

属性查询与设置

var name = author.surname 
var title = book["main title"]

(.)右侧必须是一个标识符。
([])右侧必须是一个计算结果为字符串(字符串本身或可以转换成字符串的值)的表达式。

book.edition = 6; 
book["main title"] = "ECMAScript";
var person = {
    name : 'nike',
    age : 18
}
var property = 'age';
person['property'];
person[property];
// 没有任何意义,单纯的字符串拼接,像一个拼图,property就是 'age'
// 而两者的区别是,第一个访问失败,因为对象里没有'property'属性
// 而第二句,就是person['age']

作为关联数组的对象

JS对象都是关联数组:数组元素通过字符串索引而不是数字索引。

当通过(.)访问对象的属性时,属性名用一个标识符来表示。标识符必须直接出现在JS程序中,它们不是数据类型,因此程序无法修改它们。

当通过([])来访问对象的属性时,属性名通过字符串来表示。字符串是JS的数据类型,在程序运行时可以修改和创建它们。

var addr = " "; 
for(i = 0, i < 4, i++){     
    addr += customer["address" + i] + '\n'; 
}

这段代码读取对象的address0~3的属性,并将它们连接起来。

当不知道属性名称时,可以使用([])运算符,因为它使用字符串值(字符串值是动态的,可以在运行时更改) 而不是标识符(标识符是静态的,必须写死在程序中)作为索引对属性进行访问。

function getvalue(portfolio){
     var total = 0.0;
     for(stock in portfolio){
         var shares = portfolio[stock];         
         var price = getquote(stock);         
         total += shares * price;     
     }     
     return total;       
}

继承

假设要查询对象o的属性x,如果o中不存在x,那么将会继续在o的原型对象中查询属性x。如果原型对象中也没 有x,但这个原型对象也有原型,直到找到属性或查找到一个原型是null的对象为止。

现在假设给对象o的属性x赋值,如果o中已经有属性x,那么这个赋值操作只改变这个已有属性x的值。如果o中 不存在属性x,那么赋值操作给o添加一个新的属性x。如果之前o继承自属性x,那么这个继承的属性就被新创建 的同名属性覆盖了。

// inherit()返回一个继承自原型对象p的属性的新对象
// 这里使用ES5的Object.create()函数
// 如果不存在的话,则退化使用其他方法
function inherit(p) {
    if (p == null) throw TypeError(); // p是一个对象,不能是null
    if (Object.create) { // 如果Object.create()存在的话
        return Object.create(p); // 直接使用它
        var t = typeof p;
        if (t !== "object" && t !== "function") throw TypeError();

        function f() {}; // 类似构造函数?
        f.prototype = p;
        return new f(); // 使用f()创建p的继承对象
    }
}

var o = {} // o从Object.prototype 继承对象的方法
o.x = 1;
var p = inherit(o); // p继承o和Object.prototype
p.y = 2;
var q = inherit(p); // q继承p、o和Object.prototype
q.z = 3;
var s = q.toString(); // toString继承自Object.prototype
console.log(q.x + q.y); // 3

属性赋值操作会首先检查原型链,以此判定是否允许赋值操作。例如,如果o继承自一个只读属性x,那么赋值 操作是不允许的。如果允许属性赋值操作,它也总是在原始对象上创建属性或对已有的属性赋值,而不会去修 改原型链。

在JS中,只有查询属性时才会体会到继承的存在,而设置属性则和继承无关,这是JS的一个重要特性,可以有 选择性的覆盖继承的属性。

var unitcircle = {r: 1}; // 一个用来继承的对象
var c = inherit(unitcircle); // c继承属性r
c.x = 1;
c.y = 1; // c定义两个属性
c.r = 2; // c覆盖继承来的属性
unitcircle.r; // 1,原型对象没有修改 

属性赋值要么失败,要么创建一个属性,要么在原始对象中设置属性。但有一个例外。如果o继承自属性x,而 这个属性是一个具有setter方法的accessor属性。那么这时将调用setter方法而不是给o创建一个属性x。需要注 意的是,setter方法是由对象o调用的,而不是定义这个属性的原型对象调用的。因此setter方法定义任何属性, 这个操作只是针对o本身,并不会修改原型链。


属性访问错误

  • 查询一个不存在的属性不会报错。返回undefined。

  • 如果对象不存在,查询这个不存在的对象的属性就会报错。

  • null和undefined都没有属性,因此查询这些值的属性会报错。

未确定变量是对象的情况下,避免出错的方法:

var len = book && book.subtitle && book.subtitle.length;

删除属性

  • delete运算符的操作数应该是一个属性访问表达式。

  • delete只是断开属性和宿主之间的联系,而不会去操作属性中的属性。

  • delete运算符只能删除自有属性,不能删除继承属性(要删除这个继承属性必须从定义这个属性的原型对象上删除它,而且这会影响到所有继承自这个对原型的对象)。

  • 当delete表达式删除成功或没有任何副作用(比如删除不存在的属性)时,它返回true。如果delete后不是一个属性访问表达式,delete同样返回true。

o = {x:1};
delete o.x;  //删除x,返回true  
delete o.x;  //什么都没做,x已经被删除,返回true  
delete o.toString;  // 什么也没做,无法删除继承属性,返回true 
delete 1; // 无意义,返回true
  • delete不能删除不可配置的属性。例如:通过变量声明和函数声明创建的全局对象的属性。
  • 可以删除不可扩展对象的可配置属性。
  • 在严格模式下,删除一个不可配置属性会报一个错误异常。在非严格模式下,会返回false
delete Object.prototype; // 不能删除,属性是不可配置的 
var x = 1;     // 声明一个全局变量 
delete this.x;   // 不能删除这个属性 
function f(){}   // 声明一个全局函数 
delete this.f;   // 也不能删除全局函数
  • 当在非严格模式下中删除全局对象的可配置属性时,可以省略对全局对象的引用,直接在delete操作符后跟 随要删除的属性名即可:
this.x = 1;  // 创建一个可配置的全局熟属性(没用var) 
delete x; // 将它删除
  • 在严格模式中,delete后跟随一个非法的操作数,则会报一个语法错误,因此必须显示指定对象及其属性:
delete x;   //在严格模式下报语法错误 
delete this.x; //正常工作

检测属性

检测集合中成员的所属关系,判断是否存在于某一个对象中。

  • in运算符

属性名(字符串) in 对象

var o = {x:1} 
"x" in o;   // true  
"y" in o;   // false 
"toString" in o; // true

in运算符可以区分不存在的属性和存在但值为undefined的属性。

var o = {x:undefined} 
o.x !== undefined    // false:属性存在,但值为undefined
o.y !== undefined    // false: 属性不存在 
"x" in o     // true 
"y" in o    // false 
delete o.x;     
"x" in o     //false
  • hasOwnPreperty()

检测给定的名字是否是对象的自有属性。对于继承属性它将返回false。

var o = {x:1} o.hasOwnProperty("x");   // true 
o.hasOwnProperty("y");   // false 
o.hasOwnProperty("toString");  //false
  • propertyIsEnumberable()

检测到是自有属性且这个属性可枚举才返回true。某些内置属性是不可枚举的。

  • !==

判断一个属性是否是undefined。并且可以区分null和undefined。

var o = {x:1} 
o.x !== undefined;  // true 
o.y !== undefined;  // false 
o.toString !== undefined;  // true
  • instanceof
    A instanceof B
    A的原型链上有B的原型

枚举属性

for/in 循环可以在循环体中遍历所有可枚举的属性(包括自有属性和继承属性),把属性名称赋值给循环变量。 对象继承的内置方法是不可枚举的,但在代码中给对象添加的属性都是可以枚举的。

var o = {x: 1, y: 2, z: 3};   
o.propertyIsEnumerable('toString');  //false 不可枚举 
for (p in o)       
    console.log(p,o[p],o.hasOwnProperty(p));  // 不会输出toString

ES5之前,一些新添加的方法不能定义为不可枚举,因此它们可以在for/in循环中枚举出来。为了避免这种情 况。需要过滤结果:

for (p in o){     
    if(!o.hasOwnProperty(p)) continue;   // 跳过继承的属性 
} 
for (p in o){     
    if(typeof o[p] === "function")continue;// 跳过方法 
}

属性getter和setter


属性的特性


对象的三个属性

  • 原型属性

    对象的原型属性是用来继承属性的,经常把“o的原型属性”直接叫做“o的原型”。
    查询对象的原型方法:

    • Object.getPrototypeOf(obj)

    • obj.constructor.prototype

      检测一个对象是否是另一个对象的原型(或处于原型链中):

    • p.isPrototypeOf(o)

    • [_ proto_] 用以直接查询设置对象的原型。

  • 类属性

    对象的类属性是一个字符串,用以表示对象的类型信息。
    只有一种间接的方式可以查询它:
    默认的toString方法(继承自Object.prototype)返回如下格式的字符串:
    [ object class ]
    很多对象继承的toString方法重写了,为了能调用正确的toString()版本,必须间接的调用Function.call()方法。

//返回传递给它的任意对象的类: 
function classof(o){     
    if(o === null) return "Null";     
    if(o === undefined) return "Undefined";     
    return Object.prototype.toString.call(o).slice(8,-1); 
}
  • 可扩展性

    对象的可扩展性用以表示是否可以给对象添加新属性。


序列化对象

对象序列化是指将对象的状态转换为字符串,也可将字符串还原为对象。

ES5提供了 JSON.stringify() 和 JSON.parse() 用来序列化和还原JS对象。

JSON :”JavaScript Object Notation” JS对象表示法。

o = {x:1,y:{z:[false,null,""]}};   
s = JSON.stringify(o);   
// s = '{"x":1,"y":{"z":[false,null,""]}}' 
p = JSON.parse(s);  // p是o的深拷贝

JSON语法支持对象,数组,字符串,无穷大数字,true,false,null。

NaN,Infinity,序列化结果是 null。


对象方法

  • toString()
    该方法没有参数,它返回一个表示调用这个方法的对象值的字符串。 ’ [object Object] ‘
NSGA-Ⅱ算法:从原理到实战,解锁多目标优化难题 本文深入解析NSGA-Ⅱ算法在多目标优化中的应用,从原理到实战全面覆盖。通过快速非支配排序、精英策略和拥挤度比较三大创新,NSGA-Ⅱ有效解决了传统算法的效率与多样性问题。结合工业案例展示其在注塑工艺优化中的显著效果,为工程师提供实用解决方案。 阅读详情

相关推荐

Kafka 系列 —(17)Kafka 流式处理:Kafka Streams架构、使用场景、框架选择

本文介绍了KafkaStreams的架构特点、应用场景及与其他流处理框架的比较。KafkaStreams作为嵌入式分布式流处理库,其核心架构包含流处理器、任务、拓扑和本地状态存储,具备自动容错和伸缩能力。适用于实时监控、ETL、聚合、Join、物化视图等低延迟场景。与Flink、Spark相比,KafkaStreams适合简单架构和微服务,而Flink适合大规模处理,Spark更适合批处理。选择框架需根据具体场景需求,如微服务推荐KafkaStreams,大规模处理推荐Flink。

moton2017的博客 1631

对象

对象 对象是JavaScript的基本数据类型。对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值。对象也可看作是属性的无序集合,每个属性都是一个名/值对。属性名是字符串,因此我们可以把对象看成是从字符串到值的映射。这种数据类型也可以称为散列(hash)、散列表(hashtable)、字典(dictionary)、关联数组(associative array)。 ...

yzk_jessica的博客 420

车载LIN总线避坑指南:主从节点通信失败的5个常见原因及解决方案

本文深度解析车载LIN总线主从节点通信失败的五大常见原因,涵盖物理层信号异常、调度表冲突、LDF配置错误、节点状态机缺陷及环境干扰。重点剖析了LDF文件配置不一致、波特率不匹配等关键问题,并提供了从示波器波形分析到软件配置检查的完整实战排查路径,帮助工程师高效定位并解决LIN通信故障。

g9h0i1的博客 1251

天梯180325

1. public class contained in a Java program file must have the same name as the file,except for the extension “.java”.A. FALSEB. TRUE2. Given:public class IfTest {    public static void main(String[] ...

iSuperGifted的博客 265

Stata:手动安装ivreghdfe包的完整指南与常见问题解决

本文提供了Stata中手动安装ivreghdfe包的完整指南,包括准备工作、详细安装步骤及常见问题解决方案。ivreghdfe作为处理高维固定效应模型的强大工具,依赖ftools、reghdfe和ivreg2三个核心组件,手动安装可避免版本冲突问题。文章还分享了进阶使用技巧,如并行计算加速和保存固定效应估计值,助力用户高效完成工具变量回归分析。

weixin_29251131的博客 929

《联邦学习实战》杨强 读书笔记十四——构建公平的大数据交易市场

当数据具有资产属性之后,数据便可以直接或者间接地为公司、为社会创造价值和收益,并且可以作为一种特殊的商品在市场中进行交易。 与传统的商品交易相比,数据资产交易的市场前景更广阔,但同时也面临着很多的挑战,主要包括: 数据的质量、价格如何定义 在合法合规的前提下,数据的交易如何确保不会泄露用户的隐私 如何构建合理的激励机制来鼓励更多的参与方加入数据交易市场中 大数据交易 数据交易的定义 数据交易是指一种对数据进行买卖的行为,大数据交易由三方共同参与,分别为数据提供方、大数据交易平台和数据需求方:

IEEE802_11的博客 3433

记一次 PL/SQL Developer 上 Oracle导入的错误 ORA-01435: 用户不存在

错误信息 今天,同事跟我说他通过PL/SQL Developer导入*.dmp备份文件报错。 然后发给了我日志: Import started on 2018/4/4 15:07:13 C:\oracle\product\10.2.0\client_1\BIN\imp.exe log=C:\Users\AppData\Local\Temp\plsimp.log file=C:\Users\D...

韩超的博客 (hanchao5272) 1万+

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 630

常用的日期时间格式化工具

常用的日期时间格式化方法

yyh123456hhh的博客 958

CDR插件开发之CPG插件004 - 认识VGCore并编译生成你的第一个CPG文件

上篇文章中,讲到了使用VS2019编译CDR类型库 VGCoreAuto.tlb,编译后得到了vgcoreauto.tlh和vgcoreauto.tli两个文件。本文将对这两个文件说明,并演示通过标准的libid形式来导入CDR类型库,在这个过程中,穿插一些VS2019的使用技巧(删除目录、复制工程、打开项目或解决方案、修改解决方案名称、修改项目名称等),使读者循序渐进,逐步提高对VS2019工具的熟练程度,最后通过修改项目属性配置,生成第一个CPG文件。

Zebe 2984

[VCS]VCS dump fsdb的精细化控制

本文介绍了VCS FSDB波形dump的精细化控制方法。主要内容包括:1)基本dump方式;2)通过$fsdbDumpoff排除特定层次;3)使用$fsdbDumpvars选择性dump指定模块;4)运行时动态控制dump开关;5)通过文件管理排除列表($fsdbDumpoffFile或自定义读取);6)层次控制策略(剪除整棵树或仅当前层)。这些方法可有效控制波形文件大小,提高仿真效率。

元直的博客 1033

你对P300事件相关电位知道多少?

目录P300简介P300特性P300家族P300脑机接口刺激范式1.P300的经典范式P300的应用 本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 P300简介 P300属于ERP(事件相关电位)的一种,是一种内源性的、和认知功能相关的特殊诱发电位。 P300是在事件(如听觉、视觉刺激)发生后大约300ms出现的一个...

脑机接口社区 2万+

PCL RANSAC拟合分割多条直线【2026最新版】

使用RANSAC算法拟合分割多条直线,输出每一条直线的拟合参数到控制台,并保存直线点云到本地文件夹。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 7974

被踢掉。。。。。。

视野是偶在高中时认识的,自认为是她改变了一半的偶...........一天闲逛 跑到论坛看到有个群,别提多高兴了 二话没说就申请加入 ,等批 感觉 和喜欢喜欢的人的人在一块 会很开心 心里早就把那里的人当好朋友了不想有一天>>>>>>>>>>>>>>>>>>>>> _______________________________________________________________用户:4

唯一谣|Airs|走尽天涯路|极地阳光 1131

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

cocos2dx box2d使用(一)

本例子使用的是cocos2d-x 3.0版本 首先创建一个cocos2d的c++工程,这里就不多做说明了!本例子的项目名称是MyGame 其次,在MyGame的工程设置里Build Settings下,把CC_ENABLE_CHIPMUNK_INTEGRATION=1改为CC_ENABLE_BOX2D_INTEGRATION=1,同样把项目所引入的cocos2d的工程里改一下,但coc

巫山洗雨的专栏 426

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

180326 数组

概述 数组是值的有序集合,其中值称作‘元素’,对应位置称作‘索引’ 数组继承Array.prototype中的属性 数组是对象的特殊形式,数组索引实际上和碰巧是整数的属性名差不多 创建数组 数组直接量 var arr = [1,2,'a']; var arr1 = [[1,{x:1,y:2}],[2,{x:3,y:4}]]; // 可以包含对象直接量或其他数组直接量。 ...

simpleone_的博客 492

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[other]电脑知识

积累

simpleone_的博客 351

180328 正则表达式

什么是正则表达式 检索文本时,可以对字符串内容进行模式匹配。RegExp 就是这种模式。用RegExp对象表示正则表达式。 创建正则表达式 直接量定义 /pattern/attributes var regExp = /abc/; //可以添加修饰符,可以同时使用 /abc/g 全局匹配,查找所有匹配 /abc/i 大小写不敏感 /abc/m 执行多行匹配 ...

simpleone_的博客 320

《JavaScript DOM 编程艺术(第二版)》笔记

第3章 DOM 即使在整个文档里这个标签只有一个元素,getElementsByTagName也返回一个数组。此时的数组长度是1。 HTML5 DOM 新增 getElementsByClassName 在使用类名获取标签匹配时,如果有多个类名,类名顺序和带有更多类名都可以匹配。 检查某项数据是否是null时,我们其实是在检查它是否存在。 通过setAttribute对文档做出修改后,在通过...

simpleone_的博客 318

180330 预编译

JS编译过程 语法分析:JS引擎通篇扫描,有低级错误直接报错不执行。 预编译 解释执行 执行期上下文 当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,执行上下文被销毁。 预编译 window是全局对象,在全局范围声明一个变...

simpleone_的博客 310

180731 知识点复习

1、计时器 window对象的方法:JS中重要的全局函数。 setTimeout (code执行代码, millisec延迟毫秒数) — 函数在指定的毫秒数后执行。 clearTimeout (timeoutID) setInterval() 函数在指定的毫秒数间隔里重复调用。 clearInterval() tips:即使setTImeout()传入0毫秒,函数也不会立刻执行,会进...

simpleone_的博客 279

实例练习

//1做一个循环,计算累加到300需要的次数--------------------------------------------------------- // var num = 1; // var times = 0; //1 // var realdo = true; // for (var i = 1; realdo; i++) { // num += i; // ...

simpleone_的博客 274

180420 异步加载JavaScript

部分转自韩子迟,原文地址 js时间线 1、创建Document对象,开始解析web页面。解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段document.readyState = ‘loading’。 2、遇到link外部css,创建线程加载,并继续解析文档。 3、遇到script外部js,并且没有设置async、defer,浏览器加载,并阻塞,...

simpleone_的博客 244

181206 vscode

显示tab和空格: setting.json { "editor.renderControlCharacters": true, "editor.renderWhitespace": "all" } 可视区域折行显示: setting.json { "editor.wordWrap": "on" } 更改字体: setting.json { "editor.font.

simpleone_的博客 243

180406 客户端JS WebAPI

Date对象 var oDate = new Date(); oDate.getDate() —— 几号 oDate.getDay() —— 星期几 [0-6] oDate.getFullYear() —— 年 oDate.getMonth() —— 月 [0-11] oDate.getHours() —— 时[24时] oDate.getMinutes() —— 分 ...

simpleone_的博客 242

积累

重定向:重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置。 CDN(缓存服务器):Content Delivery Network 内容分发网络。 基本思路:尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各...

simpleone_的博客 240
上一篇: 180326 数组
下一篇: 180327 函数
simpleone_
博客等级 码龄9年 14粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值