【基础篇】零碎时间整理JS

数据类型

基本数据类型

  • Undefined
  • Null
  • Boolean
  • Number
  • String

引用数据类型

  • Object(引用数据类型)
    • Date
    • Array
    • Function
    • RegExp

特殊数据类型 (ES6 添加的数据类型)

  • Symbol

Undefined前端

在将变量声明但未对其进行初始化时,这个变量的值就是undefinedgit

Nullgithub

从逻辑上看,null表示一个空对象指针,这也解释了 typeof null 为Object 的缘由
若是变量未来准备保存对象,最好先将变量保存为Nullbash

Boolean函数

只有两个值true和false,虽然只有两个值可是全部类型的值都有与这两个Boolean等价的值工具

数据类型 转化为true的值 转化为false的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 非零数值 零和NaN
Object 任何对象 null
Undefined undefined

Number学习

  • 整数
  • 浮点数
  • NaN
    NaN是一个特殊是数值,用来表示一个原本要返回数值的操做数未返回数值的状况(表明计算出错了,但未抛出异常以NaN显示)
    特色
  • 任何涉及NaN的操做都会返回NaN,这个特色可能会有较多的影响
  • NaN与任何值都不相等

isNaN()函数ui

  • 接受一个参数,判断这个参数是否‘不是数值’
  • isNaN在接受一个数值后,会先对这个数值进行类型转换,任何不能转换为数值的参事都会致使这个函数返回true
console.log(isNaN(NaN))   //true
console.log(isNaN(10))   //false
console.log(isNaN('10'))   //false
console.log(isNaN('string'))   //true
console.log(isNaN(true))   //false
复制代码

数值转换 es5

  • Number() 将任何数据转换为数值
  • parseInt() 将字符串转换为整数值
  • parseFloat() 将字符串转换为浮点数值,只转换十进制的数值
Number(true)     // 1
Number(false)     // 0
Number(null)     // 0
Number(undefined)     // NaN
Number('')     // 0
Number('123')     // 123
复制代码

Number()函数在转换字符串的时候存在不合理状况,因此在实际开发中用到的基本是parseInt()函数spa

String

  • 字符串不可改变,也就是说字符串一旦建立就不可改变,要改变这个字符串就要先销毁原来的字符串,而后用一个新的字符串填充该变量
  • 字符串转换方法toString(),可是null和undefined类型没有这个方法
  • 转型函数String(),
String(null)  // 'null'
String(undefined)  // 'undefined'
复制代码

Object类存在较多内容,后面会单独抽出一章来写,敬请期待

类型检测

  • typeof
  • instanceof
  • Object.prototype.toString

typeof

typeof 是肯定一个变量是String、Boolean、Number和Undefined的最佳工具

typeof('1') // 'string'
typeof(1) // 'number'
typeof(true) // 'boolean'
typeof(undefined) // 'undefined'
typeof(null) // 'object'
typeof(function(){}) // 'function'
typeof(new Object())  // 'object'
typeof([])  // 'object'
复制代码

typeof 只能检测出基本数据类型,引用数据类型检测不出来。 typeof(null) == 'object' 能够理解为null是一个未被赋值的空对象,因此返回object(实际上这个是js的一个bug,连接

instanceof

function Foo(){
    ....
}
var f = new Foo();

f instanceof Foo  // true
复制代码

instanceof操做符左边是一个对象,右边是一个函数,instanceof所作的事情是,在f的整条原型链【prototype】中是否有指向Foo.prototype的对象

instanceof函数的简单实现

! function Foo(){
    console.log('333333333')
}
var f = new Foo();
// f instanceof Foo 

function my_instanceof(leftObject, rightFunction){
    let leftObjectPrototype = leftObject.__proto__
    while(true){
        if(leftObjectPrototype === rightFunction.prototype){
            return true
        }
        if(leftObjectPrototype === null){
            return true
        }
        leftObjectPrototype = leftObjectPrototype.__proto__
    }
}
console.log(my_instanceof(f, Foo)) 
复制代码

原型链的关系图(后期会单开一章专门写原型链)

Object.prototype.toString

es5规范说明js对象中存在[[class]]内部属性,能够表示类型属性且在类型建立时已经规定好且不能改变的,Object.prototype.toString要作的就是拿到这个属性值

Object.prototype.toString.call(null)    //'[object Null]'  
Object.prototype.toString.call(undefined)    //'[object Undefined]'
Object.prototype.toString.call(1)    //'[object Number]'
Object.prototype.toString.call(function(){})    //'[object Function]'
Object.prototype.toString.call()    //'[object Object]'
Object.prototype.toString.call('abc')    //'[object String]'
Object.prototype.toString.call(true)    //'[object Boolean]' 
Object.prototype.toString.call([])    //'[object Array]'

复制代码

前端新手,从头梳理一下js的基础知识,文章中若是有不对的地方请各位大佬不吝赐教,也能够在个人github上看,欢迎你们start哦!你们的鼓励是不断学习进步的动力,谢谢你们!!!

相关文章
相关标签/搜索