《第3章 语言基础》

一、语法

  • 严格模式:在脚本或函数体的开头加上 "use strice"
  • 在函数内定义变量时省略 var 操作符,可以创建一个全局变量 message = 'hi'//全局变量

二、变量

var 和 let 的区别

varlet
声明的关键词变量会自动提升到函数作用域的顶部,即先输出再定义不会报错,因为把所有声明都提升到了顶部先执行变量不会在作用域中被提升
声明的范围是函数作用域声明的范围是块作用域(也就是一个大括号内)
允许同一个块内出现冗余声明不允许同一个块内出现冗余声明
在全局作用域中声明的变量会成为 window 对象的属性(window.name)在全局作用域中声明的变量不会成为 window 对象的属性
迭代变量保存的是导致循环退出的值会为每个迭代变量声明一个新的迭代变量
  • 总的来说这两个关键字声明的并不是不同类型的变量,它们只是指出变量在相关作用域如何存在
  • const 的行为与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改const 声明的变量会导致运行时错误。

三、数据类型

  • 永远不必显示地将变量值设置为 undefined ,但只要变量要保存对象,而当时又没有那个对象可保存,就要用 null 来填充该变量。
  • null 和 undefined 都是假值,即使用 if 语句判定时是不成立的。
  • NaN (not a number) ,用以表示本来要返回数值的操作失败了。任何设计 NaN 的操作的返回值始终是 NaN , NaN 不等于包括其本身在内的任何值。
  • 对于 Namber() 数值转换函数,null 返回 0,undefined 返回NaN。
let num1 = parseInt("1234blue"); // 1234
let num2 = parseInt(""); // NaN
let num3 = parseInt("0xA"); // 10,解释为十六进制整数
let num4 = parseInt(22.5); // 22
let num5 = parseInt("70"); // 70,解释为十进制值
let num6 = parseInt("0xf"); // 15,解释为十六进制整数
let num1 = parseFloat("1234blue"); // 1234,按整数解析
let num2 = parseFloat("0xA"); // 0
let num3 = parseFloat("22.5"); // 22.5
let num4 = parseFloat("22.34.5"); // 22.34
let num5 = parseFloat("0908.5"); // 908.5
let num6 = parseFloat("3.125e7"); // 31250000
let num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"
console.log(num.toString(8)); // "12"
console.log(num.toString(10)); // "10"
console.log(num.toString(16)); // "a"
  • null 和 undefined 不能使用 toString() 函数,但是可以使用 String() 函数返回其字面量文本。
  • 模板字面量使用反引号可以跨行定义字符串
let pageHTML = `
<div>
<a href="#">
<span>Jake</span>
</a>
</div>`;
  • 字符串插值会使用 toString() 强制转换为字符串
let foo = { toString: () => 'World' };
console.log(`Hello, ${ foo }!`); // Hello, World!
  • 在插值表达式中可以调用函数和方法
function capitalize(word) {
return `${ word[0].toUpperCase() }${ word.slice(1) }`;
}
console.log(`${ capitalize('hello') }, ${ capitalize('world') }!`); // Hello, World!

object 类型的通用属性和方法

属性/方法名作用
constructor用于创建当前对象的函数
hasOwnProperty(propertyName)propertyName):用于判断当前对象实例(不是原型)上是否存在给定的属性
isPrototypeOf(object)用于判断当前对象是否为另一个对象的原型
propertyIsEnumerable(propertyName)用于判断给定的属性是否可以使用for-in 语句枚举
toLocaleString()返回对象的字符串表示,该字符串反映对象所在的本地化执行环境。
toString()返回对象的字符串表示
valueOf()返回对象对应的字符串、数值或布尔值表示

四、操作符

  • 对于正数,无符号右移与有符号右移结果相同,对于复数来说则差异非常大
  • 等于( = = )和不等于( != =)会先进行强制类型转换再做比较,其中 null 和 undefined 相等且都不能转换为其他类型的值再进行比较,如果两个操作数都是对象,则仅当指向同一个对象时返回 true
  • 全等(= = =)只有两个操作数在不转换的前提下相等才返回 true,特别的 null === undefined 返回的是 false,因为是不用的数据类型
  • ECMAScript 中对象的属性是无序的,因此 for-in 语句不能保证返回对象属性的顺序。
  • for-of 循环会按照可迭代对象的 next() 方法产生值的顺序迭代元素。
  • with 语句的用途是将代码作用域设置为特定的对象
let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;

等同于

with(location) {
let qs = search.substring(1);
let hostName = hostname;
let url = href;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值