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自置的特殊对象!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容