zoukankan      html  css  js  c++  java
  • JavaScript 杂乱的小总结

    1. 基本类型只有String、number、boolean、null、undefined,还有一个Object。存在装箱类型,不过后台自动转换。
    2. 通过new创建对象时,如果没有参数,可以省略“()”。-- new也可以省略!!!变态啊
    3. 当访问对象中不存在的属性时,如obj.x,不会有任何影响;但是,如果这样赋值,那么会为原对象创建一个属性!!!
    4. 对于变量来说,除了全局作用域,就只有函数内部的作用域了。甚至for(var i = 0;..;..) 这里定义的i都是全局变量!!!
    5. 即便是在函数内部,使用var a=b=1;这样定义变量时,b默认是全局变量!!! -- 这里有个关键:默认没有定义就使用的变量为全局变量。
    6. ES6(还是5?),推出了use strict模式,没有定义的变量不能使用!该模式可以出现在文件的全局范围内(任何地方),也可以出现在方法内部!--当然,作用范围也不一样。
    7. 关于字符串转JSON,需要使用JSON.parse(str)。如果JSON转字符串,需要使用JSON.stringify(json)。
      • 需要注意的是,如果JSON中有值为undefined的属性,那该属性不会出现在结果字符串中!还有,NaN会转成null;new Date() 会转成日期!
      • 如果需要定制JSON转字符串的样式,添加一个toJSON属性即可,其值一般是方法。

    例子:

     1 // 序列化 JSON
     2 
     3 var str = '{"name":"xiaoer", "age":18}'
     4 var json = { name: "xiaoer", age: 18}
     5 
     6 var json_str = JSON.stringify(json)
     7 console.log('我是JSON转成的字符串:' + json_str)
     8 
     9 var str_json = JSON.parse(str)
    10 console.log('我是字符串解析成的JSON:' + str_json)
    11 
    12 console.log('*************************************************')
    13 json.birthday = new Date()
    14 json.sex = undefined
    15 json.pic = null
    16 json.soul = NaN
    17 console.log(str)
    18 json_str = JSON.stringify(json)//忽略undefined!!!
    19 console.log('我是JSON转成的字符串:' + json_str)
    20 
    21 console.log('*************************************************')
    22 var obj = {
    23     x: 1,
    24     y: 2,
    25     o: {
    26         o1: 1,
    27         o2: 2,
    28         toJSON: function () { // 自定义转JSON的格式
    29             return this.o1 + this.o2
    30         }
    31     }
    32 }
    33 
    34 var obj_str = JSON.stringify(obj)
    35 console.log(obj_str)

    关于数组:

    稀疏数组(就是含有未初始化的元素的数组,例如下面第4行会导致一个稀疏数组),未初始化的元素的角标实际上是不存在的。虽然遍历数组会返回undefined,但实际上角标是不存在的!这和你将【arr[i] = undefined】的操作是不同的。

    另外,【arg in arr】,这里的arg对应的是已初始化的元素的角标!!!

     1 var arr = []
     2 console.log(arr.length)
     3 
     4 arr[10] = 111; // 这样做会导致稀疏数组,就是某些角标压根没有初始化。
     5 console.log(arr.length)
     6 for (var i = 0; i < arr.length - 1 ; i++) {
     7     console.log('arr[' + i + '] = ' + arr[i]) 
     8 }
     9 
    10 console.log('*****************')
    11 arr[8] = undefined
    12 var iter;
    13 for(iter in arr){ // 这种for不会输出稀疏空缺值(不是undefined)!默认输出的是角标!
    14     console.log('arr[' + iter + '] = ' + arr[iter])
    15 }
    16 
    17 console.log('*****************')
    18 console.log('(10 in arr)' + (10 in arr)) // arg in arr; 其结果是判断角标索引,而且仅判断非undefined的角标!!!
    19 console.log('(9 in arr)' + (9 in arr)) 
    20 arr[9] = undefined
    21 console.log('(9 in arr)' + (9 in arr)) 
  • 相关阅读:
    BZOJ1409 : Password
    BZOJ2862 : 分糖果
    BZOJ2093 : [Poi2010]Frog
    BZOJ2506 : calc
    BZOJ3290 : Theresa与数据结构
    BZOJ1397 : Ural 1486 Equal squares
    BZOJ2789 : [Poi2012]Letters
    BZOJ3417 : Poi2013 Tales of seafaring
    BZOJ3251 : 树上三角形
    BZOJ3262 : 陌上花开
  • 原文地址:https://www.cnblogs.com/larryzeal/p/6001878.html
Copyright © 2011-2022 走看看