zoukankan      html  css  js  c++  java
  • JS

    1. js的几种数据类型

      基本类型: number string boolean undefinded null

      对象: object(包括function、array、date...)

      js是一个弱类型语言,如下例子:

    var a = 10
    a = "string"  // 虽然a定义为一个number 但是还是能赋值为string类型
    

    2. js隐式转换

      + / - 转换

    var num = 10
    num + "24" = "1024" // 加字符串等于字符串拼接
    num - '5' = 5 // 减会将字符串转为数字进行计算

      == / === 转换

      == 比较数值

    • 字符串和数字比较,现将字符串转为数字,然后进行比较
    • boolean和其他值比较时,先将boolean转换数字再进行比较
    • 在js规范中提到null 和 undefined在比较相等性之前不能将其转换为任何值,规定他们是相等的,并且都代表无效值
    • new object和数组[1,2] 都为引用类型,因此他们虽然值相等,但是指向不同,所以不相等
    1.23 == "1.23"   //true
    0 == false  // true
    null == undefined // true
    new Object() = new Object()  // false
    [1,2] == [1,2]

      === 严格等于,首先会比较类型,类型相同再比较值

      类型相同,和 == 一样

      类型不同,返回false

      需要注意的是NaN和任何值都不相等,甚至是它自己,NaN ≠ NaN

    3. 包装类型

      定义一个基本类型,需要以对象的方式去操作它的时候,js会将基本类型转换为包装类型,临时创建一个对象,临时操作后自动销毁

      

    var a = "string"
    console.log(a.length)  // 基本类型是没有length这个属性的,js自动处理为包装类选String,取其length
    a.t = 3; 给包装类型对象添加t属性
    console.log(a.t) // undefined,已经销毁

    4. 类型检测 

      typeof用于检测基本类型和function,但是不能检测null,typeof遇到null检测为object

    typeof 100  // number
    typeof function // function
    typeof true   // boolean
    typeof undefined  //undefined
    typeof null  // object
    typeof NaN  // number
    typeof [1,2]  // object
    typeof new Object()  // object

      Object.prototype.toString() 可用于判断基本类型、引用类型,但是在IE8以下,检测null 和 undefined会存在兼容性问题,斟酌使用~

    Object.prototype.toString.apply([])  // [object, Array]
    Object.prototype.toString.apply(function() {}) // [object, Function]
    Object.prototype.toString.apply(null) // [object, Null]
    Object.prototype.toString.apply(undefined) // [object, Undefined]

      Object对象上和原型链上都有一个toString()函数,第一个返回的是函数,第二个返回的是值类型,如下

      

       []数组本身继承自Array,Object.prototype.toString()返回的是 [object, object], 通过apply将Array的this上下文切换到了Object,调用了Object.prototype.toString(),返回了[object, Array]

      instanceof 判断对象的特定类型,也可以说是判断对象是否继承自某个对象原型

      obj instanceof Object   instance的左子树和右子树都要为对象

    function Person() {}
    function Student() {}
    Student.prototype = new Person() // Student继承Person
    Student.prototype.constructor = Student
    var jojo = new Student()
    var one = new Person()
    
    jojo instanceof Student  // true  Student为jojo的父级
    one instanceof Person  // true 同上
    one instanceof Student  // false  one和Student同为Person的子级
    jojo instanceof Person  // true  jojo继承自Student,Person为Student的父级
  • 相关阅读:
    CSS文字的处理
    typeof 检测变量的数据类型
    BZOJ 1257: [CQOI2007]余数之和
    BZOJ 1218: [HNOI2003]激光炸弹
    BZOJ 3251: 树上三角形
    BZOJ 3916: [Baltic2014]friends
    BZOJ 1610: [Usaco2008 Feb]Line连线游戏 暴力
    BZOJ 1593 [Usaco2008 Feb]Hotel 旅馆 双倍经验,线段树
    BZOJ 1096 [ZJOI2007]仓库建设 BZOJ 3437 小P的牧场 BZOJ 3156 防御准备 斜率优化dp
    BZOJ 2582 : Bovine Alliance DFS
  • 原文地址:https://www.cnblogs.com/zhoujin-Jojo/p/13558922.html
Copyright © 2011-2022 走看看