180325 对象

Windows 11 安装 JDK 11:下载、安装、配置环境变量、验证 本文详细介绍了在 Windows 11 系统中安装 JDK 11 的完整流程,包括从 Oracle 官网下载压缩包、解压到自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章还包含一个专为 JDK 11 新特性设计的测试程序,涵盖 Lambda 表达式 var 语法、HTTP 客户端 API、字符串增强方法等,帮助读者确认安装版本正确无误,适合初学者和需要多版本 JDK 共存的开发者参考。 阅读详情

概述

  • 对象可以看做是属性的无序集合,每个属性都是一个名值对。 属性名是字符串,可以把对象看成是从字符 串到值的映射。
    除了可以保持自己的属性,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] ‘
AI在智能制造中的落地:从预测维护到自适应生产调度 从最新的研究与实践来看,“预测维护”和“自适应生产调度”正在成为智能制造中最先跑通闭环的两个核心场景:前者通过对设备健康的前瞻性预测,帮助企业减少非计划停机、优化备件与维护资源;后者通过对复杂生产系统的实时决策优化,使工厂能够更好地应对订单波动、设备故障和多目标约束。更重要的是,越来越多的研究与项目不再将二者视为孤立模块,而是尝试构建“设备健康—生产调度—供应链”三者联动的一体化架构。Nature在技术层面,深度学习、强化学习、多智能体系统、图神经网络和注意力机制等方法,为建模复杂工业系统提供了强大工具; 阅读详情

相关推荐

《基于Yolo算法的火灾检测系统设计与实现》开题报告

在消防安全领域,火灾对生命财产安全构成严重威胁。传统的火灾检测手段存在诸多不足,如误报率高、检测范围有限、响应速度慢等。基于 Yolo 算法的火灾检测系统能够利用深度学习技术,实现对火灾的高效、精准检测,具有重要的现实意义。         从社会安全角度看,该系统可以广泛应用于各类公共场所、工业厂房和居民住宅,实时监测火灾隐患,及时发出警报,为人员疏散和消防救援争取宝贵时间,有效降低火灾造成的人员伤亡和财产损失,保障社会公共安全。

m0_69704149的博客 1384

对象

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

yzk_jessica的博客 420

Qt·DBus快速入门

DBus快速入门

m0_64560763的博客 2273

天梯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

【接口自动化测试】cookie绕过验证码自动登录?(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者,每次请求接口前如果都需要先去登录一次,这样不仅效率低,还耗费资源。 有些网站是使用cookie辨别用户身份的,此时我们便可以先登录一次,拿到登录成功后的cookie,后续请求时在请求头中加入该cookie,便可保持登录状态直接请求。

weixin_67553250的博客 2071

Lumerical INTERCONNECT 中的自相位调制 (SPM) 仿真实践指南

本文详细介绍了在Lumerical INTERCONNECT中进行自相位调制(SPM)仿真的实践指南。从SPM的基础物理原理出发,深入解析非线性薛定谔方程和克尔效应,到INTERCONNECT中NLSE波导元件的配置技巧,以及时域与频域中SPM效应的观测方法。文章还提供了常见问题排查和进阶联合仿真技巧,帮助用户高效完成从仿真到实测的校准过程。

weixin_42565652的博客 187

记一次 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万+

【Unity工具篇】| Unity项目中如何使用LuBan插件,详细集成步骤

前面写了一篇文章用于介绍LuBan的下载及快速使用方法:【Unity实战篇】| 实用插件LuBan,快速上手使用 本篇文章就来介绍一下将LuBan集成到自己的Unity项目的方法。 看完本篇文章之后,就可以直接把LuBan插件放到自己项目中进行配表和使用。

努力前行,总会成为自己心中的那道光 2万+

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

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

yyh123456hhh的博客 958

机器人中的数值优化(十五)——PHR增广拉格朗日乘子法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2002

【100%通过率】2023华为od机试C卷【电脑病毒感染】C++ 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 1727

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

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

脑机接口社区 2万+

WIFI和BT测试(射频工程师)

买不了吃亏买不了上当,我卖的是技能,你收获的是经验。

m0_58834499的博客 599

被踢掉。。。。。。

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

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

180326 数组

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

simpleone_的博客 492

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[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_的博客 273

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、付费专栏及课程。

余额充值