JavaScript的数据类型

这是基础版的第二天,数据类型就像是java中的内置对象与数据类型一样,对于语法的一个基础架构

JavaScript有6中数据类型 (ES6 又新增了 Symbol 和 BigInt 数据类型,先不讲述)

  • 数值 number
  • 字符串 string
  • 布尔值 boolean
  • undefined 声明定义未赋值
  • null 声明赋空值
  • 对象 object
    对象分为 函数function 数组array 对象object

数据类型判断

  • typeof (数组,null,object返回都是'object')
  • instanceof (原本是判断对象与构造函数关系,所以右侧必须是首字母大写的类型)
  • Object.prototype.toString.call() (原本的tostring方法返回[object Object]改变this指针,得到的[object 首字母大写的类型])

null与undefined

之所以放在开头讲述就是因为下面的类型都是具象的,这两个对于初学者比较抽象

  • undefined
    声明未赋值
    var x; (x是undefined类型,没有值)
  • null
    声明且赋空值
    var y = null; (y是null类型,且值为null,意思是空值)

注:

  • 当出现undefiend的时候要注意:
    变量是否在相应的作用域中有赋值
    对象访问时,上级的访问是否存在
  • 当出现null的时候要注意:
    是否是后端传递的,可能格式需要沟通转换

布尔值与数值

  • 布尔值boolean
    只有true与false,主要就是逻辑判断结果,对应着计算机底层的01编制

    强烈建议,搞编程的朋友们,不要脑子中全是是非对错,多一些辐射的可能性,可以让你的生活更加充实!

  • 数值number

    1. 正负0,是不同的,64位浮点数的符号位不同
    2. NaN,类型是number,但是数值不是数字
      判断方式只有 isNaN(),不等于自己
    3. 正负Infinity
      数值正向溢出(overflow)、负向溢出(underflow)
      判断方式只有isFinite()

注:
数字相关的方法:

  1. parseInt('参数',进制)
  2. parseFloat(参数); 将参数转换成小数,只认识一个小数点

布尔值六大0值:
false 0 null undefined NaN ‘’(空字符串)

内置的数学方法:
Math.floor(3.999) 向下取整 去掉小数部分
Math.ceil(3.001)) 向上取整 只要有小数就进位
Math.max(1, 2, 36, 9) 取参数的最大值
Math.min(1, 2, 36, 9)) 取参数的最小值
Math.floor(Math.random() 取(0,1]的随机数

字符串

  • 转义字符
    1.\n :换行符
    2.\t :制表符
    3.' :单引号
    4." :双引号
    5.\ :反斜杠

  • 字符串属性
    1.length长度
    2.下标(index)
    str[index] str.charCodeAt(index)
    3.字符串就是一个字符数组

  • 转码方式
    1.Base64(原生携带的)
    btoa():任意值转为 Base64 编码
    atob():Base64 编码转为原来的值
    2.Unicode(语法携带的)
    str.charCodeAt(index) 字符转unicode编码
    String.fromCharCode(unicode编码值) Unicode编码值转字符串

注:
字符串常用方法:
1. 查找:
字符串.indexOf(要查找的字符, 查找的起始位置); 从左向右找
字符串.lastIndexOf(要查找的字符, 查找的起始位置); 从右向左找

  1. 截取:
    字符串.substring(起始下标, 结束下标),不含结束下标
    字符串.slice(起始下标, 结束下标),不含结束下标,建议使用
    字符串.substr(起始下标, 截取的个数);,知道具体要截取的个数,挺方便的
  2. 转大小写:
    字符串.toUpperCase() 转大写
    字符串.toLowerCase() 转小写
  3. 去首尾空格:
    字符串.trim(),去除字符串左右空格,IE8及以下不支持(正则方式解决)
    5.字符串拆分:
    字符串.split(分隔符)
    6.最强大的方法splice (删除,添加,替换)
    字符串.replace(被替换的字符, 新的字符串),返回被替换以后的字符串,不影响原字符串

数组

  • 数组属性
    1.length长度
    2.下标(index)
    arr[index]
    3.数组就是一个key为数字的对象
  • 数组的特殊运算符
    1.in
    字符串 in 数组 ,判断数组的key中是否含有该字符串
    2.for( in )遍历
    借助for循环与in形成的迭代方式

注:
数组常用方法:
1. 栈操作:
数组.push(参数),向数组的尾部添加,返回数组的长度
数组.unshift(参数), 向数组的头部添加,返回数组的长度
数组.pop(),删除数组最后一项,返回被删除的项
数组.shift(),删除数组第一项,返回被删除的项

  1. 最强大的splice方法 (删除,添加,替换)
    数组.splice(起始位置, 要删除的个数, 要添加的项...),会修改原数组,也会返回新数组
    增(n,0,添加项列表)
    删(n,m)
    改(n,m,修改后的项);先删再加就是修改
  2. 数组排序:
    数组.sort() (可以自定义排序规则)
    4.数组合并:
    数组.concat(参数, ...),将参数拼接到数组中,返回新数组,不影响原数组
    5.数组项反转:
    数组.reverse(),反转数组,返回反转以后的数组,并修改原数组
    6.数组查询:
    数组.indexOf(要查找的项[, 查找的起始位置])
    数组.lastIndexOf(要查找的项[, 查找的起始位置])
    7.数组截取:
    数组.slice(起始下标, 结束下标),数组截取,不影响原数组,返回截取的新数组
    8.数组类型判断(类方法):
    Array.isArray()
    9.数组迭代方法:
    数组.forEach(function (item, index, array) { });循环数组(没有返回值),代替for循环
    数组.map(function (item, index, array) { });循环数组,返回每次函数调用的结果组成的一个新数组(可以进行逻辑与算术操作)
    数组.filter(function (item, index, array) { });循环数组,返回每次函数调用的结果为true的项组成的一个新数组(过滤)
    数组.every(function (item, index, array) { });循环数组,如果每次函数调用结果都为true,则返回true
    数组.some(function (item, index, array) { });循环数组,函数调用只要有一个为true,则结果为true
    数组.find(function (item, index, array){}); 循环数组,条件返回true,则把对应的item返回,否则返回undefined
    数组.findIndex(function (item, index, array){}); 循环数组,条件返回true,则把对应的item的下标返回,否则返回-1
    10.数组转字符串
    数组.join('连接符'),数组按照连接符连接
    11.数组求和
    数组.reduce(function (
    sum, // 累积变量,必须
    newVal, // 当前变量,必须
    newIndex, // 当前位置,可选
    array // 原数组,可选
    ) { .... })

对象

现实世界你唯唯诺诺,虚拟世界你桃花满身,对象new一个就来了

  • 对象属性
    1.属性
    对象.属性 对象{属性}
    2.对象就是一个key-value的键值对集合

  • 对象的特殊运算符
    1.in
    字符串 in 对象 ,判断对象的key中是否含有该字符串
    2.for( in )遍历
    借助for循环与in形成的迭代方式

注:
对象常用方法:
1. 属性查看(类级方法)
Object.keys(对象),返回一个属性组成的数组
Object.getOwnPropertyNames(),返回一个属性名组成的数组

  1. 属性权限配置
    Object.defineProperty(对象, 属性, {配置内容});
    Object.getOwnPropertyDescriptor(obj,属性名)方法可以获取属性描述对象

函数

  • 函数两种表现形式
    1.函数声明式:

    function xxx(){}   
    

    2.函数表达式:(本质上是变量赋值)

    let xxx = function(){}
    
  • 函数提升
    1.遇到function会提升到作用域顶部
    2.函数与变量同名,函数会覆盖变量
    3.同名函数,顺序在后覆盖顺序在前

  • 函数的基本信息
    1.函数参数
    实参与形参一一对应,没有传递则为undefined
    形参可以有默认值,实参可以有缺省值
    形参个数未知,可以使用arguments

    1. 函数返回值
      函数的调用结果,用于后续的处理
  1. 函数作用域
    先从函数中寻找变量,没有再逐层往上寻找到全局,全局没有就是undefined

注:
函数进阶:
1. 回调函数: callback
通常是一种初步解决异步的方式
2. 自执行函数(匿名函数): 做一些检测等嵌入式操作(防止对于原代码有影响)

     (function () { })();

3.闭包
函数return嵌套函数
内部函数可以读取外部函数的变量、参数或者函数
这个内部函数在包含它的外部函数外面被调用

    function xxx(){
      return function(){
      }
    }
注:
   闭包能记住它的诞生环境,这些变量会一直存在内存中
   如果大量的数据被缓存,可能造成内存泄漏,在使用闭包的时候要慎重。
   闭包沟通函数内部和外部的桥梁,缓存数据,延伸变量的作用范围。

4.回调函数: 一些复杂的逻辑
自己调用自己,但必须有递归出口

   function  xxx(){
    //递归出口判断
    if(){
      xxx()
    }
 }
今天体会了以下简书的markdom编辑方式,还行!预告一下,明天会了解JavaScript自置的特殊对象!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容