2014年12月23日星期二

黑马程序员1——mac初体验 - sanguo280

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
黑马程序员1――mac初体验 - sanguo280  阅读原文»

Mac os桌面一眼看上去类似Unix操作系统,直观看上去桌面顶部是菜单栏,底部是dock,类似windows的桌面一些图标,快捷方式都存放在dock上。dock上有一个偏好设置,它设置的是整个系统方面的。菜单栏上也有一个偏好设置,它设置的仅仅是当前打开的应用。目前正在运行的程序在dock上直观的表现是dock上的图标会有一个小白点。如果要关闭则可以右击选择关闭即可。

操作起来和windows有区别,windows中使用的一些类似最小化、关闭等操作都在右上角,而mac是在左上角;windows图标在左下角,mac的苹果图标在左上角。快捷方式和windows操作也有区别。windows中一般是ctrl+XX键,mac中则是command+XX键。windows中打开我的电脑比较直观明显,mac中finder相当于windows中的我的电脑,我们可以通过finder来看mac的文件。在操作窗口时,windows中选择最大按钮,退出时按esc即可。mac中选择右上角全屏按钮,退出时,仍然要点击右上角的缩小按钮,esc操作无效。

总之,mac操作和windows还是有不小的区别,我相信习惯于操作windows的同学们在初次操作mac os时会显得比较别扭,需要我们的是长时间体验。

ps:不善言辞,错误之处望担待。


本文链接:黑马程序员1――mac初体验,转载请注明。

javascript严格模式 - H君  阅读原文»

ECMAScript 5 最早引入了“严格模式”(strict mode)的概念。通过严格模式,可以在函数内部

选择进行较为严格的全局或局部的错误条件检测。使用严格模式的好处是可以提早知道代码中

存在的错误,及时捕获一些可能导致编程错误的ECMAScript 行为。

理解严格模式的规则非常重要,ECMAScript 的下一个版本将以严格模式为基础制定。支持严格模

式的浏览器包括IE10+、Firefox 4+、Safari 5.1+和Chrome。

1.选择使用

要选择进入严格模式,可以使用严格模式的编译指示(pragma),实际上就是一个不会赋给任何变

量的字符串:

"use strict";

这种语法(从ECMAScript 3 开始支持)可以向后兼容那些不支持严格模式的JavaScript 引擎。支持

严格模式的引擎会启动这种模式,而不支持该模式的引擎就当遇到了一个未赋值的字符串字面量,会忽

略这个编译指示。

如果是在全局作用域中(函数外部)给出这个编译指示,则整个脚本都将使用严格模式。换句话说,

如果把带有这个编译指示的脚本放到其他文件中,则该文件中的JavaScript 代码也将处于严格模式下。

也可以只在函数中打开严格模式,就像下面这样:

function doSomething(){
"use strict";
//其他代码
}

如果你没有控制页面中所有脚本的权力,建议只在需要测试的特定函数中开启严格模式。

2 .变量

在严格模式下,什么时候创建变量以及怎么创建变量都是有限制的。首先,不允许意外创建全局变

量。在非严格模式下,可以像下面这样创建全局变量:

//未声明变量
//
非严格模式:创建全局变量
//
严格模式:抛出ReferenceError
message = "Hello world! ";

即使message 前面没有var 关键字,即使没有将它定义为某个全局对象的属性,也能将message

创建为全局变量。但在严格模式下,如果给一个没有声明的变量赋值,那代码在执行时就会抛出

ReferenceError。

其次,不能对变量调用delete 操作符。非严格模式允许这样操作,但会静默失败(返回false)。

而在严格模式下,删除变量也会导致错误。

//删除变量
//
非严格模式:静默失败
//
严格模式:抛出ReferenceError
var color = "red";
delete color;

严格模式下对变量名也有限制。特别地,不能使用implements、interface、let、package、

private、protected、public、static 和yield 作为变量名。这些都是保留字,将来的ECMAScript

版本中可能会用到它们。在严格模式下,用以上标识符作为变量名会导致语法错误。

3.对象

在严格模式下操作对象比在非严格模式下更容易导致错误。一般来说,非严格模式下会静默失败的
情形,在严格模式下就会抛出错误。因此,在开发中使用严格模式会加大早发现错误的可能性。
在下列情形下操作对象的属性会导致错误:
为只读属性赋值会抛出TypeError;
对不可配置的(nonconfigurable)的属性使用delete 操作符会抛出TypeError;
为不可扩展的(nonextensible)的对象添加属性会抛出TypeError。
使用对象的另一个限制与通过对象字面量声明对象有关。在使用对象字面量时,属性名必须唯一。
例如:

//重名属性
//
非严格模式:没有错误,以第二个属性为准
//
严格模式:抛出语法错误
var person = {
name:
"Nicholas",
name:
"Greg"
};

这里的对象person 有两个属性,都叫name。在非严格模式下,person 对象的name 属性值是第
二个,而在严格模式下,这样的代码会导致语法错误。

4.函数

首先,严格模式要求命名函数的参数必须唯一。以下面这个函数为例:

//重名参数
//
非严格模式:没有错误,只能访问第二个参数
//
严格模式:抛出语法错误
function sum (num, num){
//do something
}

在非严格模式下,这个函数声明不会抛出错误。通过参数名只能访问第二个参数,要访问第一个参

数必须通过arguments 对象。

在严格模式下,arguments 对象的行为也有所不同。在非严格模式下,修改命名参数的值也会反

映到arguments 对象中,而严格模式下这两个值是完全独立的。例如:

//修改命名参数的值
//
非严格模式:修改会反映到arguments 中
//
严格模式:修改不会反映到arguments 中
function showValue(value){
value
= "Foo";
alert(value);
//"Foo"
alert(arguments[0]); //非严格模式:"Foo"
//
严格模式:"Hi"
}
showValue(
"Hi");

以上代码中,函数showValue()只有一个命名参数value。调用这个函数时传入了一个参数"Hi",

这个值赋给了value。而在函数内部,value 被改为"Foo"。在非严格模式下,这个修改也会改变

arguments[0]的值,但在严格模式下,arguments[0]的值仍然是传入的值。

另一个变化是淘汰了arguments.callee 和arguments.caller。在非严格模式下,这两个属

性一个引用函数本身,一个引用调用函数。而在严格模式下,访问哪个属性都会抛出TypeError。

例如:

//访问arguments.callee
//
非严格模式:没有问题
//
严格模式:抛出TypeError
function factorial(num){
if (num <= 1) {
return 1;
}
else {
return num * arguments.callee(num-1)
}
}
var result=factorial(5);

类似地,尝试读写函数的caller 属性,也会导致抛出TypeError。所以,对于上面的例子而言,

访问factorial.caller 也会抛出错误。

与变量类似,严格模式对函数名也做出了限制,不允许用implements、interface、let、package、

private、protected、public、static 和yield 作为函数名。

对函数的最后一点限制,就是只能在脚本的顶级和在函数内部声明函数。也就是说,在if 语句中

声明函数会导致语法错误:

//在if 语句中声明函数
//
非严格模式:将函数提升到if 语句外部
//
严格模式:抛出语法错误
if (true){
function doSomething(){
//...
}
}

在非严格模式下,以上代码能在所有浏览器中运行,但在严格模式下会导致语法错误。

5.eval()

饱受诟病的eval()函数在严格模式下也得到了提升。最大的变化就是它在包含上下文中不再创建

变量或函数。例如:

//使用eval()创建变量
//
非严格模式:弹出对话框显示10
//
严格模式:调用alert(x)时会抛出ReferenceError
function doSomething(){
eval(
"var x=10")

阅读更多内容

没有评论:

发表评论