ES6学习之数据类型、变量提升、严格模式、let const、script标签异步加载

数据类型

简单数据/基本数据/原始类型:String Number Boolean null undefined Symbol
复杂数据:Object
对象类型/引用类型/Object:Object Array Function Date RegExp

对象方法

String对象
toString valueOf toLowerCase toUpperCase toLocaleLowerCase toLocaleUpperCase
indexOf lastIndexOf includes slice split concat
repeat match search replace startsWith endsWith trim
substr substring charAt charCodeAt fromCharCode

Array对象
toString valueOf indexOf lastIndexOf includes slice splice push unshift shift pop join concat fill
sort reverse filter forEach map some keys values entries find findIndex
reduce reduceRight copyWith every
Array.isArray Array.from

Date对象[new Date()]
Date.now()
getTime getFullYear getMonth getDate getDay getHours getMinutes getSeconds getMilliseconds
setTime setFullYear setMonth setDate setHours setMinutes setSeconds setMilliseconds
valueOf() toString() toDateString() toTimeString
toLocaleString toLocaleDateString toLocaleTimeString

Math对象
ceil floor round random max min

全局方法
String Number parseInt parseFloat isNaN
encodeURI decodeURI encodeURIComponent decodeURIComponent (已废弃:escape unescape)

ES6

类不存在变量提升,这种规定的原因与继承有关,必须保证子类在父类之后定义。

严格模式"use strict"

严格模式指定一个script标签内的代码在严格条件下执行。
“use strict” 指令只允许出现在脚本或函数的开头

<script>
"use strict"
a=1; // 严格模式下不允许使用未声明变量,此处报错:a is not defined
</script>
<script>
b=1; // 此script标签内未指定严格模式,b=1生效
</script>
a=1;
"use strict" // 此行未在脚本开头,指定严格模式失败
b=2;
console.log(a) // 1

严格条件:

  1. 严格模式下不允许使用未声明的变量
  2. 函数参数不能重名
  3. 函数内this默认不再指向window,默认为undefined。
  4. delete删除不可配置的属性报错
"use strict"
a = 1; // 报错:a is not defined
b = 2; // 不会报错
var b;
"use strict"
function add(num,num) {} // 报错:Duplicate parameter name not allowed in this context(此上下文中不允许有重复的参数名)
function add(num,num) {
	console.log(num); // num赋值两次,后面的覆盖前面的。
}
add(1,2); // 2
"use strict"
function show () {
	var obj = {
		name:'乔峰',
		say: function() {
			console.log(this);
		}
	};
	console.log(this); // 调用时this指向undefined
	obj.say();
}
show(); // 在最外部调用show
/*输出:
undefined
{name: "乔峰", say: ƒ}
*/
var newShow = new show();
/*输出:
show {}
{name: "乔峰", say: ƒ}
*/
function show () {
	var obj = {
		name:'乔峰',
		say: function() {
			console.log(this);
		}
	};
	console.log(this); // 调用时this指向全局对象Window
	obj.say();
}
show(); // 在最外部调用show
/*输出:
Window
obj
*/
// 使用var let const 声明的变量不可配置,不能被delete删除,非严格模式下删除返回false
var a = 1;
console.log(Object.getOwnPropertyDescriptor(window,'a')); // 返回指定对象上一个自有属性对应的属性描述符
/* 输出:
{
	configurable: false // 表示不可配置(不可被删除)
	enumerable: true
	value: 1
	writable: true
}
*/
delete a; // false 不会报错
"use strict"
var a = 1;
delete a; // 报错:Delete of an unqualified identifier in strict mode.(在严格模式下删除非限定标识符。)

ES6

类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式。

let const

使用let const声明的变量不属于全局对象window

var a = 1;
let b = 2;
const c = 3;
console.log(window.a); // 1
console.log(window.b); // undefined
console.log(window.c); // undefined

ES6新语义模块**“暂时性死区”**,了解参考暂时性死区(TDZ)并不神秘

script标签属性

async 当引入的外部脚本无需等待页面解析,又不依赖其他脚本独立运行,使用async异步加载。
defer 当引入的外部脚本无需等待页面,但是以来其他脚本,使用defer将关联的脚本按顺序加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值