(一)语法 & 基础概念

一、JavaScript 变量的命名规则

变量命名必须以字母、下划线”_”或者”$”为开头。其他字符可以是字母、下划线、美元符号或数字。

  • 变量名中不允许使用空格和其他标点符号,首个字不能为数字。
  • 变量名长度不能超过255个字符。
  • 变量名称对大小写敏感(y 和 Y 是不同的变量),JavaScript 语句和变量都对大小写敏感。
  • 变量名必须放在同一行中。
  • 不能使用脚本语言中保留的关键字、保留字、true、false 和 null 作为标识符。

二、Const \ var \ let 定义变量的区别

const定义变量不可以修改,而且必须初始化.

  • var定义的变量可以修改,如果不初始化会输出undefined,不会报错.
  • let是块级作用域,函数内部使用let定义后,对函数外部无影响。

三、循环控制语句

For

  • For-in
    可以任意顺序遍历数组或者对象的可枚举属性
  • For-of
    不能遍历对象,只能遍历带有iterator接口的,例如Set,Map,String,Array;
    可以遍历数组,输出的是数组元素值(value)
// 对象
const object = { name: 'lx', age: 23 }
// for ... in
for (const key in object) {
  console.log(key) // 输出 name,age
  console.log(object[key]) // 输出 lx,23
}
// for ... of
for (const key of object) {
  console.log(key) // 报错 Uncaught TypeError: object is not iterable
}
// 数组对象
const list = [{ name: 'lx' }, { age: 23 }]
for (const val of list) {
  console.log(val) // 输出{ name: 'lx' }, { age: 23 }
  for (const key in val) {
    console.log(val[key]) // 输出 lx,23
  }
}
  • While
    先判断再执行
  • do-while
    先执行再判断

四、分支控制语句

  • If else
    语句更加灵活,通常用于范围判断(大于、等于某个范围)

  • switch
    通常处理case为比较确定值的情况

  • 对比:
    switch语句进行条件判断后直接执行到程序的条件语句,效率更高。而if…else语句有几种条件,就得判断多少次;
    当分支比较少,if…else语句的执行效率比switch语句更高;
    当分支比较多时,switch语句的执行效率较高,而结构更加清晰。

五、判断运算符

=== (绝对等)
不会转换数据类型,直接进行比较

  • == (模糊等)
    先进行类型转换,然后再进行比较

区别:
在比较类型相同的数据时,== 与 === 之间没有任何区别,完全一样
在比较不同类型的数据时,== 相等运算符会将数据先进行类型转换,然后再进行比较。=== 严格等不会转换数据类型,直接进行比较。
在比较时,结果为真即为 true ,结果为假即为 false。

类型转换规则:

  1. 如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字进行比较。
  2. 如果等号两边出现了null或undefined,null和undefined除了和自己相等,就彼此相等
  3. NaN无论在什么时候都不会等于自己本身,判断是不NaN 只能使用isNaN()。

: ==判断的特殊情况如下,一个值为undefinned时,仍然能通过 == null的判断。

if ( obj.hi == null ) {
}
 if ( obj.hi == undefined ) {
}
// 上面两种判断算是以下代码的简写
if ( obj.hi === null || obj.hi === undefined ) {
}

ES6新的方法Object.is 来比较两个值严格相等,它与严格比较运算符“===”基本一致,不同之处只有两个:

  1. +0不等于-0;
  2. NaN等于自身;
    代码实现:
function is(x, y){ 
  if (x === y) {
    // 运行到1/x === 1/y的时候x和y都为0,但是1/+0 = +Infinity, 1/-0 = -Infinity, 是不一样的
    return x!==0 || y!==0|| 1/x===1/y;  
  } else {
    // NaN === NaN 是false,这是不对的
    // 这里做一个拦截,x!==x,那么一定是 NaN, y同理两个都是NaN的时候返回true 
    return x!==x && y!==y;  
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值