精华内容
下载资源
问答
  • JavaScript 普通对象{key: 'value'}可用于保存结构化数据。...如果用数字作键会怎样?在这种情况下没有错误: const names = { 1: 'One', 2: 'Two', }; Object.keys(names); // => ['1', '2'] JavaScript...

    JavaScript 普通对象 {key: 'value'} 可用于保存结构化数据

    但是我发现很烦人的一件事:对象的键必须是字符串(或很少使用的符号)。

    如果用数字作键会怎样?在这种情况下没有错误:

    const names = {
      1: 'One',
      2: 'Two',
    };
    
    Object.keys(names); // => ['1', '2']

    JavaScript 只是将对象的键隐式转换为字符串。这是一件棘手的事,因为你失去了类型的一致性。

    在本文中,我将介绍 ES2015 中提供的 JavaScript Map 对象如何解决许多普通对象的问题,包括将键转换为字符串。

    1. map 可接受任意类型的键

    如上所述,如果对象的键不是字符串或符号,则 JavaScript 会将其隐式转换为字符串。

    幸运的是,map 在键类型上不存在问题:

    const numbersMap = new Map();
    
    numbersMap.set(1, 'one');
    numbersMap.set(2, 'two');
    
    [...numbersMap.keys()]; // => [1, 2]

    1 和 2 是 numbersMap 中的键。这些键的类型 number 保持不变。

    你可以在 map 中使用任何键类型:数字,布尔以及经典的字符串和符号。

    const booleansMap = new Map();
    
    booleansMap.set(true, "Yep");
    booleansMap.set(false, "Nope");
    
    [...booleansMap.keys()]; // => [true, false]

    booleansMap 用布尔值作为键没有问题。

    同样,布尔键在普通对象中不起作用。

    让我们超越界限:你能把整个对象用作 map 中的键吗?当然可以!

    1.1 把对象做为键

    假设你需要存储一些与对象相关的数据,但是不把这些数据附加到对象本身。

    不能用普通对象这样做。

    一种解决方法是用一组对象值元组:

    const foo = { name: 'foo' };
    const bar = { name: 'bar' };
    
    const kindOfMap = [
      [foo, 'Foo related data'],
      [bar, 'Bar related data'],
    ];

    kindOfMap 是一个包含一对对象和关联值的数组。

    这种方法的最大问题是通过键访问值的时间复杂度为 O(n) 。你必须遍历整个数组才能通过键获得所需的值:

    function getByKey(kindOfMap, key) {
      for (const [k, v] of kindOfMap) {
        if (key === k) {
          return v;
        }
      }
      return undefined;
    }
    
    getByKey(kindOfMap, foo); // => 'Foo related data'

    用 WeakMapMap 的专用版本)你无需为此烦恼。它接受把对象作为键。

    Map 和 WeakMap 之间的主要区别是后者允许对作为键的对象进行垃圾回收,从而防止内存泄漏。

    把上面的代码重构为使用 WeakMap 的代码付出的代价微不足道:

    const foo = { name: 'foo' };
    const bar = { name: 'bar' };
    
    const mapOfObjects = new WeakMap();
    
    mapOfObjects.set(foo, 'Foo related data');
    mapOfObjects.set(bar, 'Bar related data');
    
    mapOfObjects.get(foo); // => 'Foo related data'

    与 Map 相对,WeakMap 仅接受把对象作为键,并具有精简的方法集

    2. map 对键名没有限制

    JavaScript 中的任何对象都从其原型对象继承属性。普通的 JavaScript 对象也是如此。

    如果覆盖从原型继承的属性,则可能会破坏依赖于这些原型属性的代码:

    function isPlainObject(value) {
      return value.toString() === '[object Object]';
    }
    
    const actor = {
      name: 'Harrison Ford',
      toString: 'Actor: Harrison Ford'
    };
    
    // Does not work!
    isPlainObject(actor); // TypeError: value.toString is not a function

    在对象 actor 上定义的属性 toString 覆盖了从原型继承的 toString() 方法。因为它依赖于 toString() 方法,所以这破坏了 isObject()

    检查普通对象从原型继承的属性和方法列表。要避免使用这些名称定义自定义属性。

    例如,假设有一个管理某些自定义字段的用户界面。用户可以通过指定名称和值来添加字段:

    image.png

    将自定义字段的状态存储到一个普通对象中会很方便:

    const userCustomFields = {
      'color':    'blue',
      'size':     'medium',
      'toString': 'A blue box'
    };

    但是用户可能会选择一个自定义字段名称,例如 toString(如例中所示), constructor 等,这可能会破坏你的对象。

    不要通过接受用户的输入在普通对象上创建键!

    map 则没有这个问题。键的名称不受限制:

    function isMap(value) {
      return value.toString() === '[object Map]';
    }
    
    const actorMap = new Map();
    
    actorMap.set('name', 'Harrison Ford');
    actorMap.set('toString', 'Actor: Harrison Ford');
    
    // Works!
    isMap(actorMap); // => true

    不管 actorMap 是否具有名为 toString 的属性,方法 toString() 都能正常工作。

    3. map 是可迭代的

    为了遍历普通对象的属性,你必须用其他辅助静态函数,例如 Object.keys() 或 Object.entries() (在 ES2017 中可用):

    const colorsHex = {
      'white': '#FFFFFF',
      'black': '#000000'
    };
    
    for (const [color, hex] of Object.entries(colorsHex)) {
      console.log(color, hex);
    }
    // 'white' '#FFFFFF'
    // 'black' '#000000'

    Object.entries(colorsHex) 返回从对象提取的键值对数组。

    但是,map 本身是可迭代的:

    const colorsHexMap = new Map();
    
    colorsHexMap.set('white', '#FFFFFF');
    colorsHexMap.set('black', '#000000');
    
    for (const [color, hex] of colorsHexMap) {
      console.log(color, hex);
    }
    // 'white' '#FFFFFF'
    // 'black' '#000000'

    colorsHexMap 是可迭代的。你可以在任何可迭代的地方使用它:for() 循环,展开运算符 [...map] 等。

    map 还提供了返回迭代的其他方法:map.keys() 遍历键,map.values() 遍历值。

    4. map的大小

    普通对象的另一个问题是你无法轻松确定其拥有的属性数量:

    const exams = {
      'John Smith': '10 points',
      'Jane Doe': '8 points',
    };
    
    Object.keys(exams).length; // => 2

    要确定 exams 的大小,你必须通过它所有键来确定它们的数量。

    map 提供了一种替代方法,通过它的访问器属性 size 计算键值对:

    const examsMap = new Map([
      ['John Smith', '10 points'],
      ['Jane Doe', '8 points'],
    ]);
      
    examsMap.size; // => 2

    确定 map 的大小​​更加简单:examsMap.size

    5.结论

    普通的 JavaScript 对象通常可以很好地保存结构化数据。但是它们有一些限制:

    1. 只能用字符串或符号用作键
    2. 自己的对象属性可能会与从原型继承的属性键冲突(例如,toStringconstructor 等)。
    3. 对象不能用作键

    所有这些问题都可以通过 map 轻松解决。而且它们提供了诸如迭代器和易于进行大小查找之类的好处。

    不要将 map 视为普通对象的替代品,而应视为补充。

    更多写作与参考学习材料等可登录ZG文库网http://www.zgwenku.com/

    展开全文
  • 如果用数字作键会怎样?在这种情况下没有错误: constnames={ 1:'One', 2:'Two', }; Object.keys(names);//=>['1','2'] JavaScript 只是将对象的键隐式转换为字符串。这是一件棘手的事,因为你失去了类型的...

    JavaScript 普通对象 {key: 'value'} 可用于保存结构化数据。

    但是我发现很烦人的一件事:对象的键必须是字符串(或很少使用的符号)。

    如果用数字作键会怎样?在这种情况下没有错误:

    const names = {
      1: 'One',
      2: 'Two',
    };
    
    Object.keys(names); // => ['1', '2']

    JavaScript 只是将对象的键隐式转换为字符串。这是一件棘手的事,因为你失去了类型的一致性。

    在本文中,我将介绍 ES2015 中提供的 JavaScript Map 对象如何解决许多普通对象的问题,包括将键转换为字符串。

    1. map 可接受任意类型的键

    如上所述,如果对象的键不是字符串或符号,则 JavaScript 会将其隐式转换为字符串。

    幸运的是,map 在键类型上不存在问题:

    const numbersMap = new Map();
    
    numbersMap.set(1, 'one');
    numbersMap.set(2, 'two');
    
    [...numbersMap.keys()]; // => [1, 2]

    1 和 2 是 numbersMap 中的键。这些键的类型 number 保持不变。

    你可以在 map 中使用任何键类型:数字,布尔以及经典的字符串和符号。

    const booleansMap = new Map();
    
    booleansMap.set(true, "Yep");
    booleansMap.set(false, "Nope");
    
    [...booleansMap.keys()]; // => [true, false]

    booleansMap 用布尔值作为键没有问题。

    同样,布尔键在普通对象中不起作用。

    让我们超越界限:你能把整个对象用作 map 中的键吗?当然可以!

    1.1 把对象做为键

    假设你需要存储一些与对象相关的数据,但是不把这些数据附加到对象本身。

    不能用普通对象这样做。

    一种解决方法是用一组对象值元组:

    const foo = { name: 'foo' };
    const bar = { name: 'bar' };
    
    const kindOfMap = [
      [foo, 'Foo related data'],
      [bar, 'Bar related data'],
    ];

    kindOfMap 是一个包含一对对象和关联值的数组。

    这种方法的最大问题是通过键访问值的时间复杂度为 O(n)  。你必须遍历整个数组才能通过键获得所需的值:

    function getByKey(kindOfMap, key) {
      for (const [k, v] of kindOfMap) {
        if (key === k) {
          return v;
        }
      }
      return undefined;
    }
    
    getByKey(kindOfMap, foo); // => 'Foo related data'

    用 WeakMapMap 的专用版本)你无需为此烦恼。它接受把对象作为键。

    Map 和 WeakMap 之间的主要区别是后者允许对作为键的对象进行垃圾回收,从而防止内存泄漏。

    把上面的代码重构为使用 WeakMap 的代码付出的代价微不足道:

    const foo = { name: 'foo' };
    const bar = { name: 'bar' };
    
    const mapOfObjects = new WeakMap();
    
    mapOfObjects.set(foo, 'Foo related data');
    mapOfObjects.set(bar, 'Bar related data');
    
    mapOfObjects.get(foo); // => 'Foo related data'

    与 Map 相对,WeakMap 仅接受把对象作为键,并具有精简的方法集

    2. map 对键名没有限制

    JavaScript 中的任何对象都从其原型对象继承属性。普通的 JavaScript 对象也是如此。

    如果覆盖从原型继承的属性,则可能会破坏依赖于这些原型属性的代码:

    function isPlainObject(value) {
      return value.toString() === '[object Object]';
    }
    
    const actor = {
      name: 'Harrison Ford',
      toString: 'Actor: Harrison Ford'
    };
    
    // Does not work!
    isPlainObject(actor); // TypeError: value.toString is not a function

    在对象 actor 上定义的属性 toString 覆盖了从原型继承的 toString() 方法。因为它依赖于 toString() 方法,所以这破坏了 isObject()

    检查普通对象从原型继承的属性和方法列表。要避免使用这些名称定义自定义属性。

    例如,假设有一个管理某些自定义字段的用户界面。用户可以通过指定名称和值来添加字段:

    1.png

    将自定义字段的状态存储到一个普通对象中会很方便:

    const userCustomFields = {
      'color':    'blue',
      'size':     'medium',
      'toString': 'A blue box'
    };

    但是用户可能会选择一个自定义字段名称,例如 toString(如例中所示), constructor 等,这可能会破坏你的对象。

    不要通过接受用户的输入在普通对象上创建键!

    map 则没有这个问题。键的名称不受限制:

    function isMap(value) {
      return value.toString() === '[object Map]';
    }
    
    const actorMap = new Map();
    
    actorMap.set('name', 'Harrison Ford');
    actorMap.set('toString', 'Actor: Harrison Ford');
    
    // Works!
    isMap(actorMap); // => true

    不管 actorMap 是否具有名为 toString 的属性,方法 toString() 都能正常工作。

    3. map 是可迭代的

    为了遍历普通对象的属性,你必须用其他辅助静态函数,例如 Object.keys() 或 Object.entries() (在 ES2017 中可用):

    const colorsHex = {
      'white': '#FFFFFF',
      'black': '#000000'
    };
    
    for (const [color, hex] of Object.entries(colorsHex)) {
      console.log(color, hex);
    }
    // 'white' '#FFFFFF'
    // 'black' '#000000'

    Object.entries(colorsHex) 返回从对象提取的键值对数组。

    但是,map 本身是可迭代的:

    const colorsHexMap = new Map();
    
    colorsHexMap.set('white', '#FFFFFF');
    colorsHexMap.set('black', '#000000');
    
    for (const [color, hex] of colorsHexMap) {
      console.log(color, hex);
    }
    // 'white' '#FFFFFF'
    // 'black' '#000000'

    colorsHexMap 是可迭代的。你可以在任何可迭代的地方使用它:for() 循环,展开运算符 [...map] 等。

    map 还提供了返回迭代的其他方法:map.keys() 遍历键,map.values() 遍历值。

    4. map的大小

    普通对象的另一个问题是你无法轻松确定其拥有的属性数量:

    const exams = {
      'John Smith': '10 points',
      'Jane Doe': '8 points',
    };
    
    Object.keys(exams).length; // => 2

    要确定 exams 的大小,你必须通过它所有键来确定它们的数量。

    map 提供了一种替代方法,通过它的访问器属性 size 计算键值对:

    const examsMap = new Map([
      ['John Smith', '10 points'],
      ['Jane Doe', '8 points'],
    ]);
      
    examsMap.size; // => 2

    确定 map 的大小更加简单:examsMap.size

    5.结论

    普通的 JavaScript 对象通常可以很好地保存结构化数据。但是它们有一些限制:

    1. 只能用字符串或符号用作键
    2. 自己的对象属性可能会与从原型继承的属性键冲突(例如,toStringconstructor 等)。
    3. 对象不能用作键

    所有这些问题都可以通过 map 轻松解决。而且它们提供了诸如迭代器和易于进行大小查找之类的好处。

    不要将 map 视为普通对象的替代品,而应视为补充。

    你知道 map 相对于普通对象的其他好处吗?请在下面写下你的评论!

    原文地址:https://dmitripavlutin.com/maps-vs-plain-objects-javascript/

    更多编程相关知识,请访问:编程课程!!

    展开全文
  • js对象的属性中括号表示

    千次阅读 2018-12-25 20:37:40
    中括号运算符总是能代替...中括号运算符可以数字为属性名。点运算符不能。 中括号运算符可以js的关键字和保留字作为属性名。点运算符不能。 a.b=5;; a[ 'b' ]= 5; 即[ ]也可以代表属性; 利用 for ( var x ...
    中括号运算符总是能代替点运算符。但点运算符却不一定能全部代替中括号运算符。

    中括号运算符可以用字符串变量的内容作为属性名。点运算符不能。

    中括号运算符可以用纯数字为属性名。点运算符不能。

    中括号运算符可以用js的关键字和保留字作为属性名。点运算符不能。
    a.b=5;;                  a[ 'b' ]= 5;      即[ ]也可以代表属性;
    利用 for ( var x in object) {length++  }; 可以计算object对象内部的键值对 数;
    delete  a[b] 可以直接删除对象a的属性b;
    对象的属性值可以是数组,object.element=new array( );
    展开全文
  • XML代替程序中信息显示的硬编码

    千次阅读 2007-11-07 11:39:00
    程序中通常会有一些错误代码或标识,为了程序中方便这些东西通常不会使用汉字,经常在程序中用的是一些FileError或数字。还有就是在编码中经常使用的枚举标识对象的状态。通常这些信息会直接的或间接的显示给用户,...
    程序中通常会有一些错误代码或标识,为了程序中方便这些东西通常不会使用汉字,经常在程序中用的是一些FileError或数字。还有就是在编码中经常使用的枚举标识对象的状态。
    通常这些信息会直接的或间接的显示给用户,可用户需要到的是容易理解的汉字描述。以前要么将这些标识和枚举的转换规则硬编码到程序中,要么就直接提示给用户。
    前者没有很好的扩展性,而后者则让用户一头雾水。现可以用流行的XML(配置文件)保存提示信息,然后用一个对象将机器中的内码转换为人们容易理解的信息。

    转换对象如下:

        /// <summary>
        
    /// 翻译类,将内部码翻译成容易理解的中文
        
    /// </summary>
        
    /// <remarks>
        
    /// 根据配置文件中的信息,将系统内部码(错误码、成功码)翻译成中文(或人容易理解的语言)。
        
    /// </remarks>

        public static class Translation
        
    {
            
    private static System.IO.FileSystemWatcher watcher;
            
    private static XmlDocument content;
            
    private static string configFile;
            
    private static object locker = new object();

            
    /// <summary>
            
    /// 加载配置文件
            
    /// </summary>
            
    /// <param name="configFile"></param>

            public static void Configure(string configFile)
            
    {
                LoadFile(configFile);
                
    if (watcher != null)
                
    {
                    watcher.Dispose();
                }

                watcher 
    = new FileSystemWatcher(Path.GetDirectoryName(configFile), Path.GetFileName(configFile));
                watcher.Changed 
    += new FileSystemEventHandler(watcher_Changed);
            }


            
    /// <summary>
            
    /// 加载默认配置文件
            
    /// </summary>

            public static void Configure()
            
    {
                
    if (System.Web.HttpContext.Current != null)
                
    {
                    Configure(System.Web.HttpContext.Current.Server.MapPath(
    "~/translation.config"));
                }

                
    else
                
    {
                    Configure(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
    + "/" + "translation.config");
                }

            }


            
    /// <summary>
            
    /// 加载文件内容
            
    /// </summary>
            
    /// <param name="configFile"></param>

            private static void LoadFile(string configFile)
            
    {
                
    lock (locker)
                
    {
                    XmlDocument doc 
    = new XmlDocument();
                    doc.Load(configFile);

                    content 
    = doc;
                    Translation.configFile 
    = configFile;
                }

            }


            
    /// <summary>
            
    /// 当文件变更时,从新加载文件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>

            private static void watcher_Changed(object sender, FileSystemEventArgs e)
            
    {
                LoadFile(configFile);
            }


            
    /// <summary>
            
    /// 获取Enum的解释,如果Enum有Flag标记,则使用逗号分隔各个解释
            
    /// </summary>
            
    /// <param name="enumValue"></param>
            
    /// <returns></returns>

            public static string GetEnumDescription(Enum enumValue)
            
    {
                
    return GetEnumDescription(enumValue, ",");
            }


            
    /// <summary>
            
    /// 获取Enum的解释,如果Enum有Flag标记,则使用sparator分隔各个解释
            
    /// </summary>
            
    /// <param name="enumValue"></param>
            
    /// <param name="sparator"></param>
            
    /// <returns></returns>

            public static string GetEnumDescription(Enum enumValue, string sparator)
            
    {
                Type type 
    = enumValue.GetType();

                
    //检查类型是否有Flags特性
                object[] attrs = type.GetCustomAttributes(typeof(FlagsAttribute), false);
                
    if (attrs.Length > 0)
                
    {
                    StringBuilder builder 
    = new StringBuilder();
                    Array arr 
    = Enum.GetValues(type);
                    
    foreach (Enum enu in arr)       //循环获取每一个值的解释
                    {
                        
    if ((Convert.ToUInt64(enumValue) & Convert.ToUInt64(enu)) == Convert.ToUInt64(enu))     //判断是否有这个值
                        {
                            builder.Append(GetEnumDes(type, enu.ToString()));
                            builder.Append(sparator);
                        }

                    }

                    
    if (builder.Length != 0)        //拿掉最后的分隔符
                        builder.Remove(builder.Length - sparator.Length, sparator.Length);
                    
    return builder.ToString();
                }

                
    else
                
    {
                    
    return GetEnumDes(type, enumValue.ToString());
                }

            }


            
    /// <summary>
            
    /// 获取某一Enum类型值的解释
            
    /// </summary>
            
    /// <param name="type"></param>
            
    /// <param name="value"></param>
            
    /// <returns></returns>

            private static string GetEnumDes(Type type, string value)
            
    {
                
    string xquery = "/translation/enum/" + type.FullName + "/" + value;
                XmlNode node 
    = content.SelectSingleNode(xquery);
                
    if (node != null)
                    
    return node.InnerText;
                
    else
                    
    return value;
            }


            
    /// <summary>
            
    /// 翻译指定值
            
    /// </summary>
            
    /// <param name="obj"></param>
            
    /// <returns></returns>

            public static string GetValueDescription(object obj)
            
    {
                
    return GetValueDescription("default", obj);
            }


            
    /// <summary>
            
    /// 在指定组中翻译指定值
            
    /// </summary>
            
    /// <param name="group"></param>
            
    /// <param name="obj"></param>
            
    /// <returns></returns>

            public static string GetValueDescription(string group, object obj)
            
    {
                
    if (obj == null)
                    
    return "null";

                
    string xquery = "/translation/description[@group='" + group + "']/add[@key='" + obj.ToString() + "']/@value";
                XmlNode node 
    = content.SelectSingleNode(xquery);
                
    if (node == null)
                    
    return obj.ToString();
                
    else
                    
    return node.Value;
            }

        }


    在这个对象使用前需要使用Configure方法来加载xml配置文件,默认的配置文件名称为translation.config。转换对象使用单例模式,使用了一个FileSystemWatcher对象来监视XML文件,如果XML有变化,则从新加载。查询XML使用了XPath表达式。

    然后即可使用
    GetEnumDescription和GetValueDescription方法来翻译枚举和标识了。如果没有找到可以翻译的值,则会返回对象的ToString方法的返回值。

    示例XML配置:

    <?xml version="1.0" encoding="utf-8" ?>
    <translation>
      
    <enum>
        
    <!--此出要用枚举的全名-->
        
    <Library.UserType>
          
    <Unknow>未知</Unknow>
          
    <AfterPayUser>后付费用户</AfterPayUser>
          
    <BeforePayUser>预付费用户</BeforePayUser>
        
    </Library.UserType>
      
    </enum>

      
    <description group="default">
        
    <add key="FileErrorl" value="文件已损坏" />
      
    </description>

      
    <description group="skin">
        
    <add key="Default" value="默认皮肤" />
      
    </description>

      
    <description group="topic">
        
    <add key="space" value="&lt;span class='red'&gt;您剩余的空间不足,请您删除部分文件。&lt;/span&gt;&lt;br/&gt;" />
        
    <add key="yue" value="&lt;span class='red'&gt;您的余额不足,请尽快充值。&lt;/span&gt;&lt;br /&gt;" />
      
    </description>
    </translation>
    展开全文
  • 枚举中有个方法, ordinal()方法,它的值是枚举常量在类型中的数字位置,如果把枚举里面的内容对象看成是一个数组,那么,这个值就是索引。 public enum Ensemble {  SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET,...
  • 中括号运算符总是能代替点...中括号运算符可以数字为属性名。点运算符不能。中括号运算符可以js的关键字和保留字作为属性名。点运算符不能。 转载于:https://www.cnblogs.com/pisceshope/p/9690729.html...
  • 内置对象类型

    2020-10-15 11:31:05
    在计算机编程中,我们把符号代替数据(不仅是数字)的做法称为赋值。把代替数据的符号称为变量。 使用变量进行编程,这可是迈向抽象思维重要的一步。 在编程中,变量的作用是定义存储数据的空间,但在学
  • 整个区域主要有3层,第一层为最底层的底板区域,第二层为(本文及以下内容均4代替,4*4=16)自定义游戏大小个方块格子,第三层为方块格子上的数字 初始化游戏数据,创建一个4*4的全空数组 在随机两个无数字位置...
  • 我们都知道,取js对象的时候可以.也可以[]。但是区别之前不是很清楚,今天在网上搜罗了,现总结如下: 中括号运算符总是能代替点运算符。但点运算符却不一定能全部代替中括号运算符。 中括号运算符可以...
  • 接上篇JavaScript数组存值问题(1):  更改需求:点击按钮,上面的数字以id=数字的形式转换为对象,把对象传入数组。数组长度小于10,在10个...代码在原生js的基础上作了改进,jQuery代替某些语句,使其变得更...
  • 如果省略了该参数,将 0 代替。 返回值 返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以 0 补足,以便它达到指定的长度。如果 num 大于 le+...
  • let obj = {  'aaa':'aaa',  'bbb':'bbb'}; 1.点运算符取值let value = obj.aaa; 2.中括号运算符取值let value = obj['aaa']; 区别:(1)中括号运算符总是能代替点运算符,但点...(3)中括号运算符可以数字...
  • 定义和用法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。 语法 NumberObject.toFixed(num) ...规定小数的位数,是 0 ~ 20...如果省略了该参数,将 0 代替。 返回值 返回 NumberObject 的字符
  • 静态工厂方法代替构造器 准备知识 自动装箱:从基本数据类型转换成包装类型。 自动拆箱:从包装类型转换成基本数据类型。 包装类: number(数字类型) Byte(byte) Short(short) Integer(int) Long...
  • 区别: 1.中括号运算符总是能代替点运算符。但点运算符却不一定能全部代替中括号运算符。...中括号运算符可以数字为属性名。点运算符不能。4.中括号运算符可以js的关键字和保留字作为属性名。点运算符不能。...
  • !...如上图中的内容,在查询到数据之后返回的数据有2,3,4,的数据,这些数据都是@ID对应的数字,相当于同一个数据只出现一次,@ID代替,但是这些数据在转成实体的时候就会报错,不识别这些数字
  • 直播带货作为近年来发展最为迅猛的互联网营销模式,发展之快让几乎所有的互联网平台都积极参与其中,直播带货不仅在期间成为了商家和消费者之间最直接的...“不知道大家有没有留意,如今直播间都开始‘人气值’来代替
  • 【Scheme归纳】3 比较do, let, loop

    万次阅读 2015-03-12 14:06:16
    对象的比较eq?这个函数用来比较2个对象的地址,如果相同的话就返回#t。在Scheme中真#t表示,假则#f。...来比较数字,因为在R5RS和MIT-Scheme中均没有被指定返回值,建议使用eqv?或者=代替。以下是一些示例
  • 到这里举一个小例子把语法部分梳理一下,下... 首先将数据倒序,然后将每位数字都加上5,再和除以10的余数代替数字, 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数, 然后,把加密后的结
  •  NSString类copy,控件类weak,,复杂数据类的strong,数字类,比如INUIgter,nsinter,cgreck这些assign1:ARC环境下,strong代替retain.weak代替assign2:weak的作用:在ARC环境下,,所有指向这个对象的...
  • web第五章 json

    2020-06-29 22:07:33
    数据交换格式独立于编程语言专业数据和概念语法基于对象字面量“基于”,不涉及函数名称-值 对(都有双引号,冒号分隔)语法:可移植性没有双引号:不是json,而是js对象不能单引号代替语法验证json文件媒体类型...
  • Pandas库 1 常用数据对象 (1)Series对象 pd.Series(data=None, ...传入字典时,索引字典的键代替。 index:索引,传入应为列表 name:为对象起名字 """ Series对象的属性 gdp.index gdp.values gdp.name gdp.index.
  • MySQL数据库优化

    2018-08-13 21:22:00
    1.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段 ...2.设计表字段能用数字类型就千万别用字符类型,比如存IP地址,用int,别用varchar(方法自己百度一下吧)  ...
  • 第二章 js的语法 1、变量为字符串时,如果字符串中有单引号或者双引号,可以通过 \ (反斜线...4、用对象代替传统数组的做法意味着可以通过元素的名字而不是下标数字来引用它们。这大大提高了脚本的可读性。 5、数值可
  • c++ 变量

    2018-07-02 15:40:08
    不能出现运算符、关键字,不能用数字开头,不能用连续的下划线;区分大小写。(中文可做变量名)变量名命名习惯:不要太长,不要用简单的a.b.c.d来写变量,一般直接用英文来代替,来表示他的一些意义。3.定义对象...
  • 我们都知道,取js对象的时候可以.也可以[],他们两者是有区别的: 1.中括号运算符总是能代替点运算符。但点运算符却不一定能全部代替中括号运算符。 2.中括号运算符可以字符串变量的内容作为属性名。点运算符...
  • python之枚举类

    2020-04-22 14:07:24
    今天记录一下关于python枚举类的学习笔记。 ...引用时用数字代替类型对象(比如要求进行判断) fruit =int(input('1-苹果','2-香蕉','3-菠萝')) if fruit == 1: # 判断是否为苹果 print('th...
  • sizeof()sizeof的使用场合: - sizeof操作符的一个主要用途是与存储分配和I/o...- 由于操作数的字节数在实现时可能出现变化,建议在涉及操作数字节大小时sizeof代替常量计算 - 如果操作数是函数中的数组形参或函
  • 2020-10-21

    2020-10-21 19:22:14
    字符串构造 1 单引号或双引号改造字符串 再单引号或双引号构造字符串时,要求引号...字符串格式化两个概念:格式和格式化,其中格式以%开头,格式化运算符%表示用对象代替格式串中的格式并最终得到一个字符串 ...
  • Java 泛型 Java generic

    2014-11-07 19:17:34
    可以定义带泛型类型的类或方法,随后编译器会具体的类型来代替它。例如,可以定义一个泛型栈类,它存储的是泛型元素。可以从这个泛型类生成一个包含字符串的栈对象和一个包含数字的桟对象。这里字符串和数字都是...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 151
精华内容 60
关键字:

对象用数字代替