博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[译] Javascript初学者需要知道的十件事
阅读量:5060 次
发布时间:2019-06-12

本文共 2617 字,大约阅读时间需要 8 分钟。

原文:http://www.quora.com/JavaScript/What-are-the-top-ten-things-a-beginner-must-know-about-JavaScript


 

 

1. Javascript没有类的概念。一般使用原型链继承(prototypal inheritance)来模拟类。

 

2. 除了null和undefined之外的任何数据类型都能表现成Object (behave like an object),包括Number类型和Function类型。

var n = 42;function f() { alert("foo"); };alert("n is " + n.toString()); // "n is 42"alert(f.name + " is a function"); // "f is a function"

注意,是“表现为object”,而不是“是object”。事实上,number, string和boolean是基本类型(primitives),除了这三个之外的都可以算作object,比如一个正则表达式也是一个object。 当需要访问基本类型变量的属性时,那些基本类型变量将被临时转换成object。 例如:

"foobar".big();// is equivalent tonew String("foobar").big();3.14.toFixed();// is equivalent tonew Number(3.14).toFixed()

另外,不能强行给基本类型变量(number, string, boolean)加上私有属性。

var a = "mystring",    b = new String( "mystring" );Object.defineProperty( b, 'foo', { value: 42, enumerable: false });console.log(b.foo); // 42Object.defineProperty( a, 'foo', { value: 42, enumerable: false });// TypeError: Object.defineProperty called on non-object// trying another way:a.foo = 42;// remember, this is equivalent to:// new Number(a).foo = 42;// …so the 'foo' property is defined on the wrapper, not on 'a'console.log(a.foo); // undefined

 

3. 如果变量名前不加上var,那么这个变量就是全局的。

function setGlobal() {  a = 42;}function setLocal() {  var b = 23;}setGlobal();alert(a); // 42setLocal();alert(b); // ReferenceError: b is not defined

 

4. this指针是由调用函数赋予的, 而不是由被调函数自身定义的。 例如:

var a = {}, b = {};a.foo = 42;b.foo = 18;a.alertFoo = function() { alert(this.foo); };a.alertFoo(); // 42a.alertFoo.call(b); // 18

 

5. 严格的相等判断应该使用===。例如 :

0 == false 为真, 但是 0 === false 为假。

 

6. 0, undefined, null, "", NaN 都是假值 (falsy)。

 这些值全都等同于false,但他们之间不能相互替换。

 

7. 变量声明会被提升到当前作用域的顶端。 例如:下述代码中,你认为调用foo函数会返回什么?

var a = 2;function foo() {    return a;    var a = 5;}

它将返回undefined。 上述代码等同于下述代码:

var a = 2;function foo() {    var a; // 'a' declaration is moved to top    return a;    a = 5;}

另一个例子: 下述代码中,调用函数foo后变量a的值是什么?

var a = 42;function foo() {    a = 12;    return a;    function a(){}}

答案是42。因为foo函数中变相声明了a变量,因此a成了局部变量了。

function foo() {    function a() {} // local 'a' is a function    a = 12; // local 'a' is now a number (12)    return a; // return the local 'a' (12)}

 

8. 参数在函数声明中可以省略, 例如:

function hello(name, age) {  alert("Hello "+name+", you’re "+age+" years old!");}hello("Anon", 42); // "hello Anon, you’re 42 years old!"hello("Baptiste"); // "hello Baptiste, you’re undefined years old!"hello("Bulat", 24, 42); // "hello Bulat, you’re 24 years old!"

 

9. 对于字符串,使用双引号""和单引号''的效果是一样的。

 

10. Javascript代码可以在浏览器环境之外运行, 比如在Terminal或者HTTP服务器上。(例如 Node.js)

 

转载于:https://www.cnblogs.com/newyorker/archive/2013/01/18/2865820.html

你可能感兴趣的文章
【TDS学习文档2】概念理解
查看>>
北京信息科技大学第十一届程序设计竞赛(重现赛)H
查看>>
母版页的应用
查看>>
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin/java: No such file or directory
查看>>
iOS系统状态栏动态隐藏问题
查看>>
jenkins中的流水线( pipeline)的理解(未完)
查看>>
一个简单的全备数据库的脚本以及系统数据库是否需要备份
查看>>
第二阶段冲刺第二天
查看>>
【AGC003F】Fraction of Fractal
查看>>
PJzhang:ping命令的基本用法
查看>>
远程仓库的使用
查看>>
Codeforces Round #441 (Div. 2) (ABC)
查看>>
HTML笔记
查看>>
vue知识点总结
查看>>
luogu_1359 租用游艇
查看>>
Struts1和Struts2区别
查看>>
CSS3入门之字体
查看>>
【Leetcode_easy】783. Minimum Distance Between BST Nodes
查看>>
【opencv基础】opencv和dlib库中rectangle类型之间的转换
查看>>
个人总结08
查看>>