恶补js基础第一轮

恶补js基础第一轮

变量提升(hoisting)

js引擎解析代码的方式是先把所有被声明的变量放在头部,所以会出现以下情况

    console.log(a) // undefined
    var a = 1

标识符

可以使用中文名字作为标识符,标识符就是你给你的变量起的名字

    // 合法
  var 夏鸣予 = '哎呀呀'

这里我的理解就是对象不是由keyvalue组成的吗,key就是字符串,你写中文,其实我认为js被解析的时候自动帮你转为字符串了。

区块

用大括号把一组语句括起来,被称为区块。

var声明的变量不存在块级作用域,letconst存在

数据类型

这个地方有的文章写js有基本数据类型和复杂数据类型,有的地方写原始类型和合成类型,搞不清楚了。我是这样记的。

String,Number,NULL,Undefined,Boolean,Symbol,Object,Array,Function这些类型,注意函数也是一种数据类型,所以函数可以作为参数传给别的函数。

typeof 运算符

typeof运算符判断你定义的变量是什么数据类型,得注意以下几点。

  • typeof数组,是一个对象(object)
  • typeof null,也是一个对象(object)

谈谈我对null和undefined的理解

参考文章: 阮一峰的网络日志

  • 二者的数据类型是不一样的一个是Object一是undefined
  • null可以作为原型链的终点
  • undefined可以理解为你有这个变量,或者函数要这个参数,但是你不给它赋值或者传值

布尔值

这里注意一点

在用if判断空数组或者空对象时,是能进入代码块的,所以我判断空数组一般用数组的length属性,判断对象是不是空我一般Object.keys('你的对象').length!==0

数值范围

js能够表示的整数范围: 大于等于2的1024次方,返回Infinity,小于等于2的-1075次方返回0

NAN

NaN中文翻译过来就是不是一个数字,比如在进行逻辑运算的时候5- x,结果就是NaN,

工作总结: 有时候会出现让输入框只能让用户输入数字,这时候在inputchange事件就可以做这种判断(num为用户输入的值)

    // 输入框change事件
    handleSkuNumChange () {
        // 判断用户输入的值是不是数字,不是数字或者用户输入的值小于1,就置1
      if (isNaN(num) || num < 1) {
        num = 1
      } else {
          // 如果是物品的数量,那肯定就要置1了
        num = parseInt(num)
      }
    },

NaN是Numer类型

IsNaN方法

isNaN用来判断一个数据是否是整数,

记一个知识点: 对于空数组和数组中只有一个值的变量,isNaN返回的是false

示例:

  • isNaN([])// false
  • isNaN([1]) // flase

字符串

  • 字符串用单引号或者双引号起来

  • 良好的编程风格: js代码中字符串应用单引号包起来。

  • 在单引号中使用单引号,在双引号中使用双引号要用转义字符"\""'\''

字符串与数组

  • 字符串可以按照数组的方式取值
    const str = 'hello'
    console.log(str[0]) // h
  • 但是字符串不能像数组那样修改值

        const str = 'hello'
        str[0] = 'w'
        console.log(str) // hello
    

length属性

length属性返回字符串的长度,但是与数组不同的是字符串的length属性是无法手动改变的

对象

首先搞清楚一个点对象是引用类型

在这里插入图片描述

定义一个对象obj实际上在栈内存存的是对象的地址,可以理解为指针,指针是指向堆内存实际的数据的。所以说会出现下面的情况

    const obj = {
      x: 1
    }
    const bar = obj
    obj.x = 2
    console.log(bar.x) // 2

取值

对象里面的数据格式是key: value的形式,当我把key取中文的时候,我就明白了,js是能自动帮我把key转为字符串的,但是如果你的key值不符合命名规则,比如第一个字符是运算符或者数字,那么你的key值必须加上引号。

取对象里面的值有2种方式

  • obj.foo这时候foo是个字符串
  • obj[foo],这时候foo是个变量,比如foo='bar',那么obj[foo]实际上是obj.bar

in操作符

in操作符判断这个属性(key)是不是属于这个对象 in的左边是key值,右边是这个对象。

注意一点: 继承的属性用in操作符也是有效的

示例:

    const obj = {}
    console.log('toString' in obj) // true

delete操作符

delete操作符用户删除对象中的某个属性,删除成功返回true,但是有个问题是,对象里面没这个属性你删除,也返回true,也就是不能通过delete操作符返回的结果,来判断这个对象中有没有这个key

for in

for in用来遍历对象

示例:

    const obj = {
      x: 1,
      y: 2
    }
    for (key in obj) {
      console.log(key)
    }

for in对于继承的属性也是能够遍历出来的,出bug时需要注意。可以考虑用hasOwnProperty判断这个key是不是本身的

    const obj = {
      x: 1,
      y: 2
    }
    // 获取obj对象的原型并添加一个a属性
    Object.getPrototypeOf(obj).a = 1
    for (key in obj) {
      console.log(key)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值