博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【基础篇】零碎时间整理JS
阅读量:7085 次
发布时间:2019-06-28

本文共 3123 字,大约阅读时间需要 10 分钟。

数据类型

基本数据类型

  • Undefined
  • Null
  • Boolean
  • Number
  • String

引用数据类型

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

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

  • Symbol

Undefined

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

Null

从逻辑上看,null表示一个空对象指针,这也解释了 typeof null 为Object 的原因

如果变量将来准备保存对象,最好先将变量保存为Null

Boolean

只有两个值true和false,虽然只有两个值但是所有类型的值都有与这两个Boolean等价的值

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

Number

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

isNaN()函数

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

数值转换 

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

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

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的基础知识,文章中如果有不对的地方请各位大佬不吝赐教,也可以在我的上看,欢迎大家start哦!大家的鼓励是不断学习进步的动力,谢谢大家!!!

转载地址:http://ubqml.baihongyu.com/

你可能感兴趣的文章
Codeforces 496C - Removing Columns
查看>>
Codeforces 1053 C - Putting Boxes Together
查看>>
UVA - 11090 Going in Cycle!!
查看>>
TOJ 4804: 树网的核
查看>>
datetime format
查看>>
Asp.Net js 日期控件(My97DatePicker)
查看>>
react js踩坑之路(一)
查看>>
django项目设计
查看>>
[iOS]如何给Label或者TextView赋HTML数据
查看>>
C# To IL(四)
查看>>
监听时间变动事件Intent.ACTION_TIME_TICK
查看>>
MarkChanges: Jmeter
查看>>
Data truncation: Incorrect datetime value: 'May 15, 2019 4:15:37 PM
查看>>
JS Date.Format
查看>>
程序员的十大经验和教训
查看>>
数据生成树 ---新增
查看>>
#if和#ifdef区别
查看>>
cpu故障定位 top strace pstack
查看>>
[转] 多进程 join && daemon
查看>>
centos下将系统预置yum源更换为阿里云源
查看>>