基本数据类型

判断数据类型

typeof

  1. let s = 'string', b = false, n = 10, list = [], o = {}, nl = null,u = undefined;
  2. typeof s // 'string'
  3. typeof b // 'boolean'
  4. typeof n // 'number'
  5. typeof list // 'object'
  6. typeof o // 'object'
  7. typeof nl // 'object'
  8. typeof u // 'undefined'
  • 数组、对象、null都是’object’;懂
  • NaN 的数据类型是数值
  • 数组的数据类型是对象
  • 日期的数据类型是对象
  • null 的数据类型是对象
  • 未定义变量的数据类型是 undefined
  • 尚未赋值的变量的数据类型也是 undefined

    constructor 构造函数指向

    1. s.constructor === String // true
    2. n.constructor === Number //true
    3. b.constructor === Boolean // true
    4. list.constructor === Array // true
    5. o.constructor === Object // true
    6. nl.constructor === Error
    7. u.constructor === Error
  • null、undefined没有构造函数

  • 构造函数的指向可以被更改,不好用

    toString,

    1. Object.prototype.toString.call(s) // [object String]
    2. Object.prototype.toString.call(n) // [object Number]
    3. Object.prototype.toString.call(b) // [object Boolean]
    4. Object.prototype.toString.call(list) // [object Array]
    5. Object.prototype.toString.call(o) //[object Object]
    6. Object.prototype.toString.call(nl) // [object Null]
    7. Object.prototype.toString.call(nl) // [object Undefined]
  • 这个方法挺好,第二位返回的原始值类型或者原始引用类型

    转换

    string的方法

  • 通过String全局方法转换成字符串

    • 可以时任意类型的数字、文字、变量或者表达式
    • 类似的还有toString()原型方法

      number的方法

  • toExponential()

    • 返回字符串,对数字进行舍入,并使用指数技术法来写
  • toFixed
    • 返回字符串,对数字进行舍入,后面用指定位数的小数来填充
  • toPrecision
    • 返回字符串,把数字写为指定的长度
  • Numer()

    • Number(“3.14”) // 返回 3.14
    • Number(“ “) // 返回 0
    • Number(“”) // 返回 0
    • Number(“99 88”) // 返回 NaN
    • Number(‘dd’) //返回NaN
    • parseFloat // 返回浮点数
    • parseInt // 返回整数
    • true // 1
    • false //0

      Boolean

      1. Boolean([])
      2. true
      3. Boolean({})
      4. true
      5. Boolean(1)
      6. true
      7. Boolean(0)
      8. false
      9. Boolean('')
      10. false
      11. Boolean('s')
      12. true
      13. Boolean('2')
      14. true
  • 好奇怪

    一元运算符

    1. 9 + 'd' // '9d'
    2. 'd' + 10 // 'd10'
    3. {} + 'd' // NaN
    4. 'd' + {} // ‘d[object Object]' 好熟悉
    5. [] + 'd' // d
    6. 1 + null // 数字1
    7. '' + null // 'null'
    8. "5" + 2 // 返回 52 因为 2 被转换为 "2"
    9. "5" - 2 // 返回 3 因为 "5" 被转换为 5
    10. "5" * "2" // 返回 10 因为 "5" 和 "2" 被转换为 5 和 2

判断属性是否存在

  1. let obj = {
  2. a:10
  3. }
  4. 'a' in obj // true
  5. obj.hasOwnProperty("a") // true

in Object

  • in 对判断自身的可枚举值,也会判断原型链上继承过来的可枚举值
    1. function P(params) {
    2. this.a = 10
    3. }
    4. let p = new P();
    5. p.b = 20;
    6. console.log(p); // P {a: 10,b:20}
    7. console.log(('a' in p)); // true
    8. console.log(('b' in p)); // true

    instanceof

    hasOwnProperty

    ```javascript function P(params) { this.a = 10 } P.prototype.b = 20 let p = new P();

Object.prototype.hasOwnProperty.call(p, “toString”); // false Object.prototype.hasOwnProperty.call(p, “b”); // false Object.prototype.hasOwnProperty.call(p, “a”); // true ```

  • 指示对象 自身属性 中是否具有指定的属性
  • 该方法会忽略掉那些从原型链上继承到的属性

    getOwnPropertyNames

  • 该方法返回一个指定对象的所有自身属性和属性名。包括不可枚举属性,不包括Symbol值做为名称的属性组成的数组

    getOwnPropertSymbols

  • 返回一个给定对象自身的所有Symbol属性的数组

    propertyIsEnumerable

  • 判断一个属性是否可枚举

    可枚举值

    | | 可枚举属性 | 不可枚举属性 | | | —- | —- | —- | —- | | 判断 | 通过propertyIsEnumerable和hasOwnProperty的方法的调用会返回true。 | 会返回false.
    通过hasOwnProperty获取属性会使用p…过滤可枚举属性 | 可以通过
    in 判断 | | 访问 | Object.keys
    getOwnPropertyNames
    getOwnPropertySymbols | 获取会使用p…..过滤可枚举属性 | | | 迭代 | Object.keys
    getOwnPropertyNames
    getOwnPropertySymbols | 获取会使用p…..过滤可枚举属性 | |

JavaSript全局方法及属性

属性 描述
Infinity 代表正的无穷大的数值。
NaN 指示某个值是不是数字值。
undefined 指示未定义的值。
函数 描述
decodeURI() 解码某个编码的 URI。
decodeURIComponent() 解码一个编码的 URI 组件。
encodeURI() 把字符串编码为 URI。
encodeURIComponent() 把字符串编码为 URI 组件。
escape() 对字符串进行编码。
eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
isFinite() 检查某个值是否为有穷大的数。
isNaN() 检查某个值是否是数字。
Number() 把对象的值转换为数字。
parseFloat() 解析一个字符串并返回一个浮点数。
parseInt() 解析一个字符串并返回一个整数。
String() 把对象的值转换为字符串。
unescape() 对由 escape() 编码的字符串进行解码