如何mac book怎么复制粘贴sureface book数据

Javascript 严格模式详解 - 阮一峰的网络日志
Javascript 严格模式详解
除了正常运行模式,ECMAscript 5添加了第二种运行模式:(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。
设立"严格模式"的目的,主要有以下几个:
  - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  - 消除代码运行的一些不安全之处,保证代码运行的安全;
  - 提高编译器效率,增加运行速度;
  - 为未来新版本的Javascript做好铺垫。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经它,许多大项目已经开始全面拥抱它。
另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。
本文将对"严格模式"做详细介绍。
二、进入标志
进入"严格模式"的标志,是下面这行语句:
  "use strict";
老版本的浏览器会把它当作一行普通字符串,加以忽略。
三、如何调用
"严格模式"有两种调用方法,适用于不同的场合。
3.1 针对整个脚本文件
将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。如果这行语句不在第一行,则无效,整个脚本以"正常模式"运行。如果不同模式的代码文件合并成一个文件,这一点需要特别注意。
(严格地说,只要前面不是产生实际运行结果的语句,"use strict"可以不在第一行,比如直接跟在一个空的分号后面。)
  &script&
    "use strict";
    console.log("这是严格模式。");
  &/script&
  &script&
    console.log("这是正常模式。");kly, it's almost 2 years ago now. I can admit it now - I run it on my school's network that has about 50 computers.
  &/script&
上面的代码表示,一个网页中依次有两段Javascript代码。前一个script标签是严格模式,后一个不是。
3.2 针对单个函数
将"use strict"放在函数体的第一行,则整个函数以"严格模式"运行。
  function strict(){
    "use strict";
    return "这是严格模式。";
  function notStrict() {
    return "这是正常模式。";
3.3 脚本文件的变通写法
因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中。
  (function (){
    "use strict";
    // some code here
   })();
四、语法和行为改变
严格模式对Javascript的语法和行为,都做了一些改变。
4.1 全局变量显式声明
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。
"use strict";
  v = 1; // 报错,v未声明
  for(i = 0; i < 2; i++) { // 报错,i未声明
因此,严格模式下,变量都必须先用var命令声明,然后再使用。
4.2 静态绑定
Javascript语言的一个特点,就是允许"动态绑定",即某些属性和方法到底属于哪一个对象,不是在编译时确定的,而是在运行时(runtime)确定的。
严格模式对动态绑定做了一些限制。某些情况下,只允许静态绑定。也就是说,属性和方法到底归属哪个对象,在编译阶段就确定。这样做有利于编译效率的提高,也使得代码更容易阅读,更少出现意外。
具体来说,涉及以下几个方面。
(1)禁止使用with语句
因为with语句无法在编译时就确定,属性到底归属哪个对象。
  "use strict";
  with (o){ // 语法错误
    v = 2;
(2)创设eval作用域
正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。
正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。
  "use strict";
  var x = 2;
  (eval("var x = 5; x")); // 5
  (x); // 2
4.3 增强的安全措施
(1)禁止this关键字指向全局对象
  function f(){
    return !
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){
    "use strict";
    return !
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。
  function f(){
    "use strict";
    this.a = 1;
  f();// 报错,this未定义
(2)禁止在函数内部遍历调用栈
  function f1(){
    "use strict";
    f1.
    f1. // 报错
4.4 禁止删除变量
严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。
  "use strict";
   // 语法错误
  var o = Object.create(null, {'x': {
      value: 1,
      configurable: true
  delete o.x; // 删除成功
4.5 显式报错
正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。
  "use strict";
  var o = {};
  Object.defineProperty(o, "v", { value: 1, writable: false });
  o.v = 2; // 报错
严格模式下,对一个使用getter方法读取的属性进行赋值,会报错。
  "use strict";
  var o = {
    get v() { return 1; }
  o.v = 2; // 报错
严格模式下,对禁止扩展的对象添加新属性,会报错。
  "use strict";
  var o = {};
  Object.preventExtensions(o);
  o.v = 1; // 报错
严格模式下,删除一个不可删除的属性,会报错。
  "use strict";
  delete Object. // 报错
4.6 重名错误
严格模式新增了一些语法错误。
(1)对象不能有重名的属性
正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。
  "use strict";
  var o = {
    p: 1,
    p: 2
  }; // 语法错误
(2)函数不能有重名的参数
正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。
  "use strict";
  function f(a, a, b) { // 语法错误
4.7 禁止八进制表示法
正常模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。
  "use strict";
  var n = 0100; // 语法错误
4.8 arguments对象的限制
arguments是函数的参数对象,严格模式对它的使用做了限制。
(1)不允许对arguments赋值
  "use strict";
  arguments++; // 语法错误
  var obj = { set p(arguments) { } };
// 语法错误
  try { } catch (arguments) { }
// 语法错误
  function arguments() { }
// 语法错误
  var f = new Function("arguments", "'use strict'; return 17;");
// 语法错误
(2)arguments不再追踪参数的变化
  function f(a) {
    a = 2;
    return [a, arguments[0]];
  f(1); // 正常模式为[2,2]
  function f(a) {
    "use strict";
    a = 2;
    return [a, arguments[0]];
  f(1); // 严格模式为[2,1]
(3)禁止使用arguments.callee
这意味着,你无法在匿名函数内部调用自身了。
  "use strict";
  var f = function() { return arguments. };
  f(); // 报错
4.9 函数必须声明在顶层
将来Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。
  "use strict";
  if (true) {
    function f() { } // 语法错误
  for (var i = 0; i < 5; i++) {
    function f2() { } // 语法错误
4.10 保留字
为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。
使用这些词作为变量名将会报错。
  function package(protected) { // 语法错误
    "use strict";
     // 语法错误
此外,ECMAscript第五版本身还规定了另一些保留字(class, enum, export, extends, import, super),以及各大浏览器自行增加的const保留字,也是不能作为变量名的。
五、参考链接
- Dr. Axel Rauschmayer,
- Douglas Crockford,
一、什么是内存泄漏?
程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。
学习函数式编程,必须掌握很多术语,否则根本看不懂文档。
本文要回答一个很重要的问题:函数式编程有什么用?
学习函数式编程的过程中,我接触到了 Ramda.js。理解javascript中的严格模式
作者:Reeoo
字体:[ ] 类型:转载 时间:
这篇文章主要帮助大家理解javascript中的严格模式,何为严格模式,如何启用严格模式,感兴趣的小伙伴们可以参考一下
一、什么是严格模式
我们平时写的JavaScript代码一般都运行在正常模式中的,除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。看名字就知道,这种模式会让JavaScript在更严格的环境中运行。
包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱。(github上面好多项目都是用的严格模式)
二、启用严格模式
为整个脚本启用严格模式
在所有语句之前放一个特定语句 "use strict";
假设有一个脚本reeoo.js,可以这样开启严格模式:
"use strict";
var name = "Reeoo";
console.log(name);
BUT这种写法存在天然的坑,假如我们要做代码合并,我现在要把heigui.js:
heigui = "db";
和reeoo.js进行合并,本来两个脚本分开执行是好好的,合起来就会报错。
Uncaught ReferenceError: heigui is not defined(…)
一个严格模式的脚本和一个非严格模式的脚本合并可能会导致非严格模式的脚本代码报错,建议代码都包在一个立即执行函数里面。
(function(){
"use strict";
var name = "reeoo";
(function(){
heigui = "db";
这样合并之后就不会报错了。
为某个函数启用严格模式
要给某个函数开启严格模式,得把"use strict"; 声明放在函数体所有语句之前就行了。
function strictFun()
// 函数级别严格模式语法
'use strict';
console.log('I am a strictmode function!');
function normalFun() {
console.log('I am a mormal function!');
Chrome中调试严格模式
我有这么一段代码:
'use strict'
name = "reeoo";
console.log(name)
把这段代码直接粘贴到Chrome的控制台中执行,正常情况下应该报错,但是并没有报错,
很显然,严格模式下变量不适用var声明是不合法的,但是为什么没有报错?
这是什么鬼,难道Chrome不支持严格模式?开什么玩笑。。。
网上搜了一下,原来Chrome的控制台的代码是运行在eval之中的,你没法对eval函数使用严格模式(应该也不完全对,但是具体Chrome做了什么,不得而知),下图说明eval函数可以使用严格模式:
要想在Chrome浏览器中对严格模式正常报错,需要在代码外层套一个立即执行函数,或者其它类似的措施。
(function(){
'use strict'
name = "reeoo";
console.log(name)
这样就可以了
FireFox代码草稿纸调试严格模式
Chrome非要我们包一层闭包才能跑严格模式,既然这么麻烦,有没有别的方式可以直接跑严格模式的代码呢?
FireFox有一个代码草稿纸可以直接跑,快捷键SHIFT+F4
严格模式到底有多严格
严格模式中一些重要的限制
<span style="color: #、变量声明
不允许使用一个没有声明的变量
"use strict";
name = "reeoo";
报错(代码草稿纸,下同)
Exception: ReferenceError: assignment to undeclared variable name
2、修改只读属性的值
"use strict";
var testObj = Object.defineProperties({}, {
value: 10,
writable: false // 一个只读的属性
get: function () {
testObj.prop1 = 20; //尝试改变prop1的值
testObj.prop2 = 30;//尝试改变prop2的值
严格模式下会报错:
Uncaught TypeError: Cannot assign to read only property 'prop1' of #&Object&
非严格模式顶多就是值赋不上去而已,并不会报错
3、修改不可扩展的属性
表现为将属性添加到 extensible 属性设置为 false 的对象。
"use strict";
var testObj = new Object();
Object.preventExtensions(testObj);//经过这个方法处理过的对象,不影响原有对象的删除,修改.但是无法添加新的属性成员了.
testObj.name = "reeoo";
严格模式报错:
Uncaught TypeError: Can't add property name, object is not extensible
非严格模式不会报错,但是testObj也不会被扩展。
4、删除变量、函数或参数
删除 configurable 特性设置为 false 的属性。
"use strict";
var testvar = 15,testObj={};
function testFunc() {};
delete testF
Object.defineProperty(testObj, "testvar", {
value: 10,
configurable: false
delete testObj.
Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
5、在一个对象文本中多次定义某个属性
严格模式下不允许一个属性有多个定义
"use strict";
var testObj = {
prop1: 10,
prop2: 15,
报错(node控制台)
Duplicate data property in object literal not allowed in strict mode
正常模式中后声明的重复的变量会覆盖前面声明的,而且不会报错。
注:这个问题在ECMAScript6中已被修复。
6、严格模式下不允许形参参数名称重复
"use strict";
function testFunc(param1, param1) {
Uncaught SyntaxError: Duplicate parameter name not allowed in this context
7、无法使用标识符的未来保留字。严格模式下将保留标识符名称
一下标识符(ES6中依然没有实现的)在严格模式中是不能使用的,否则也会报错。
用了就是这个下场:
Uncaught SyntaxError: Unexpected strict mode reserved word
implements
8、严格模式下不允许使用八进制数字参数和转义字符
"use strict";
var testoctal = 010;
var testescape = \010;
Uncaught SyntaxError: Unexpected token ILLEGAL(…)
9、当this 的值为 null 或 undefined 时,该值不会转换为全局对象
"use strict";
function testFunc() {
var testvar = testFunc();
在非严格模式下,testvar 的值为全局对象window,但在严格模式下,该值为 undefined。
10、字符串"eval"不能用作标识符(变量或函数名、参数名等)
"use strict";
var eval = "hehe";
Uncaught SyntaxError: Unexpected eval or arguments in strict mode
11、在严格模式下,函数声明无法嵌套在语句或块中。它们只能显示在顶级或直接显示在函数体中
"use strict";
var arr = [1, 2, 3, 4, 5];
var index =
for (index in arr) {
function myFunc() {};
node控制台:
SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function.
但是这个限制已经在ES6中被修复
12、严格模式下eval用法无效
如果在 eval 函数内声明变量,则不能在此函数外部使用该变量。
"use strict";
eval("var testvar = 10");
console.log(testvars);
Uncaught ReferenceError: testvar is not defined
13、严格模式下"arguments"用法无效
字符串”arguments”不能用作标识符(变量或函数名、参数名等)。
"use strict";
var arguments = 1;
Uncaught SyntaxError: Unexpected eval or arguments in strict mode
这个跟上面第10条的限制是差不多的。
14、函数内的 arguments,无法更改arguments 对象的成员的值
"use strict";
function testArgs(oneArg) {
arguments[0] = 20;
在非严格模式下,可以通过更改 arguments[0] 的值来更改 oneArg 参数的值,从而使 oneArg 和 arguments[0] 的值都为 20。在严格模式下,更改 arguments[0] 的值不会影响 oneArg 的值,因为 arguments 对象只是一个本地副本。
15、不允许使用arguments.callee
"use strict";
function my(testInt) {
if (testInt-- == 0)
arguments.callee(testInt--);
用了的下场就是这样:
Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
16、不允许使用with
"use strict";
with (Math){
x = cos(3);
y = tan(7);
Uncaught SyntaxError: Strict mode code may not include a with statement
为什么要使用严格模式
既然这种模式这么多限制,我为什么还要用呢?闲得蛋疼吗?当然8是,
JavaScript作为一门一开始用于浏览器的脚本语言,容错性非常好,即使有时候你的代码写的不标准,也不会报错,但这有时候会变成代码隐患。开启了严格模式之后,JavaScript的一些不合理的不严谨的语法都会得到控制,让你能够更严谨的书写JavaScript代码,成为一个更好的程序员。严格模式是ES5时代的产物,ES2015已经在普及的路上,是时候使用严格模式了!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具javascript基础数据类型_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
javascript基础数据类型
|0|0|文档简介
北大青鸟IT培训|
总评分0.0|
&&在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用“”号或‘&#39;括起来的字符或数值)、布尔型(使True或False表示)和空值。
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Javascript 是一种由Netscape的LiveScript发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要帮助大家理解javascript中的严格模式,何为严格模式,如何启用严格模式,感兴趣的小伙伴们可以参考一下
一、什么是严格模式
我们平时写的JavaScript代码一般都运行在正常模式中的,除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。看名字就知道,这种模式会让JavaScript在更严格的环境中运行。
包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱。(github上面好多项目都是用的严格模式)
二、启用严格模式
为整个脚本启用严格模式
在所有语句之前放一个特定语句 "use strict";
假设有一个脚本reeoo.js,可以这样开启严格模式:
"use strict";
var name = "Reeoo";
console.log(name);
BUT这种写法存在天然的坑,假如我们要做代码合并,我现在要把heigui.js:
heigui = "db";
和reeoo.js进行合并,本来两个脚本分开执行是好好的,合起来就会报错。
Uncaught ReferenceError: heigui is not defined(…)
一个严格模式的脚本和一个非严格模式的脚本合并可能会导致非严格模式的脚本代码报错,建议代码都包在一个立即执行函数里面。
(function(){
"use strict";
var name = "reeoo";
(function(){
heigui = "db";
这样合并之后就不会报错了。
为某个函数启用严格模式
要给某个函数开启严格模式,得把"use strict"; 声明放在函数体所有语句之前就行了。
function strictFun()
// 函数级别严格模式语法
'use strict';
console.log('I am a strictmode function!');
function normalFun() {
console.log('I am a mormal function!');
Chrome中调试严格模式
我有这么一段代码:
'use strict'
name = "reeoo";
console.log(name)
把这段代码直接粘贴到Chrome的控制台中执行,正常情况下应该报错,但是并没有报错,
很显然,严格模式下变量不适用var声明是不合法的,但是为什么没有报错?
这是什么鬼,难道Chrome不支持严格模式?开什么玩笑。。。
网上搜了一下,原来Chrome的控制台的代码是运行在eval之中的,你没法对eval函数使用严格模式(应该也不完全对,但是具体Chrome做了什么,不得而知),下图说明eval函数可以使用严格模式:
要想在Chrome浏览器中对严格模式正常报错,需要在代码外层套一个立即执行函数,或者其它类似的措施。
(function(){
'use strict'
name = "reeoo";
console.log(name)
这样就可以了
FireFox代码草稿纸调试严格模式
Chrome非要我们包一层闭包才能跑严格模式,既然这么麻烦,有没有别的方式可以直接跑严格模式的代码呢?
FireFox有一个代码草稿纸可以直接跑,快捷键SHIFT+F4
严格模式到底有多严格
严格模式中一些重要的限制
1、变量声明
不允许使用一个没有声明的变量
"use strict";
name = "reeoo";
报错(代码草稿纸,下同)
Exception: ReferenceError: assignment to undeclared variable name
2、修改只读属性的值
"use strict";
var testObj = Object.defineProperties({}, {
value: 10,
writable: false // 一个只读的属性
get: function () {
testObj.prop1 = 20; //尝试改变prop1的值
testObj.prop2 = 30;//尝试改变prop2的值
严格模式下会报错:
Uncaught TypeError: Cannot assign to read only property 'prop1' of #&Object&
非严格模式顶多就是值赋不上去而已,并不会报错
3、修改不可扩展的属性
表现为将属性添加到 extensible 属性设置为 false 的对象。
"use strict";
var testObj = new Object();
Object.preventExtensions(testObj);//经过这个方法处理过的对象,不影响原有对象的删除,修改.但是无法添加新的属性成员了.
testObj.name = "reeoo";
严格模式报错:
Uncaught TypeError: Can't add property name, object is not extensible
非严格模式不会报错,但是testObj也不会被扩展。
4、删除变量、函数或参数
删除 configurable 特性设置为 false 的属性。
"use strict";
var testvar = 15,testObj={};
function testFunc() {};
delete testF
Object.defineProperty(testObj, "testvar", {
value: 10,
configurable: false
delete testObj.
Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
5、在一个对象文本中多次定义某个属性
严格模式下不允许一个属性有多个定义
"use strict";
var testObj = {
prop1: 10,
prop2: 15,
报错(node控制台)
Duplicate data property in object literal not allowed in strict mode
正常模式中后声明的重复的变量会覆盖前面声明的,而且不会报错。
注:这个问题在ECMAScript6中已被修复。
6、严格模式下不允许形参参数名称重复
"use strict";
function testFunc(param1, param1) {
Uncaught SyntaxError: Duplicate parameter name not allowed in this context
7、无法使用标识符的未来保留字。严格模式下将保留标识符名称
一下标识符(ES6中依然没有实现的)在严格模式中是不能使用的,否则也会报错。
用了就是这个下场:
Uncaught SyntaxError: Unexpected strict mode reserved word
implements
8、严格模式下不允许使用八进制数字参数和转义字符
"use strict";
var testoctal = 010;
var testescape = \010;
Uncaught SyntaxError: Unexpected token ILLEGAL(…)
9、当this 的值为 null 或 undefined 时,该值不会转换为全局对象
"use strict";
function testFunc() {
var testvar = testFunc();
在非严格模式下,testvar 的值为全局对象window,但在严格模式下,该值为 undefined。
10、字符串"eval"不能用作标识符(变量或函数名、参数名等)
"use strict";
var eval = "hehe";
Uncaught SyntaxError: Unexpected eval or arguments in strict mode
11、在严格模式下,函数声明无法嵌套在语句或块中。它们只能显示在顶级或直接显示在函数体中
"use strict";
var arr = [1, 2, 3, 4, 5];
var index =
for (index in arr) {
function myFunc() {};
node控制台:
SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function.
但是这个限制已经在ES6中被修复
12、严格模式下eval用法无效
如果在 eval 函数内声明变量,则不能在此函数外部使用该变量。
"use strict";
eval("var testvar = 10");
console.log(testvars);
Uncaught ReferenceError: testvar is not defined
13、严格模式下"arguments"用法无效
字符串”arguments”不能用作标识符(变量或函数名、参数名等)。
"use strict";
var arguments = 1;
Uncaught SyntaxError: Unexpected eval or arguments in strict mode
这个跟上面第10条的限制是差不多的。
14、函数内的 arguments,无法更改arguments 对象的成员的值
"use strict";
function testArgs(oneArg) {
arguments[0] = 20;
在非严格模式下,可以通过更改 arguments[0] 的值来更改 oneArg 参数的值,从而使 oneArg 和 arguments[0] 的值都为 20。在严格模式下,更改 arguments[0] 的值不会影响 oneArg 的值,因为 arguments 对象只是一个本地副本。
15、不允许使用arguments.callee
"use strict";
function my(testInt) {
if (testInt-- == 0)
arguments.callee(testInt--);
用了的下场就是这样:
Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
16、不允许使用with
"use strict";
with (Math){
x = cos(3);
y = tan(7);
Uncaught SyntaxError: Strict mode code may not include a with statement
为什么要使用严格模式
既然这种模式这么多限制,我为什么还要用呢?闲得蛋疼吗?当然8是,
JavaScript作为一门一开始用于浏览器的脚本语言,容错性非常好,即使有时候你的代码写的不标准,也不会报错,但这有时候会变成代码隐患。开启了严格模式之后,JavaScript的一些不合理的不严谨的语法都会得到控制,让你能够更严谨的书写JavaScript代码,成为一个更好的程序员。严格模式是ES5时代的产物,ES2015已经在普及的路上,是时候使用严格模式了!
Copyright &
All Rights Reserved &&&&&&}

我要回帖

更多关于 mac book 复制粘贴 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信