JavaScript语言精粹_糟粕

全局变量

  JavaScript没有连接器(linker),所有的编译单元都载入一个公用的全局对象中。

  一共有3种方式定义全局变量。

  1. var foo = value;

  2. window.foo = value;

  3. foo = value;

  这本来是为方便初学者而有意让变量在使用前无需声明,但忘记声明变量是一个非常普遍的错误,而JavaScript的策略是让那些忘记预先声明的变量成为全局变量,这导致查找bug非常困难。

作用域

  JavaScript的语法来源于C,在大多数语言中,一般来说声明变量的最好的地方是在第一次用到它的地方。但JavaScript中没有块级作用域,所以更好的方式是在每个函数的开头部分声明所有变量。

自动插入分号

  JavaScript有一个机制,它通过自动插入分号来修正有缺陷的程序,千万不要依靠它,它可能会掩盖更为严重的错误

  比如:

return
{
     status:true
};

  

return{
     status:true
};

  返回的是两种不同的结果,第一个:自动分号让它变成了undefined。第二个返回一个包含status成员元素的对象。

保留字

  许多单纯被JavaScript保留,它们不能被用来命名变量或参数,当保留字被用作字面量的键值时,他们必须被引号括起来,它们不能被用在点表示法中,所以又是必须使用括号表示法。

Unicode 

  当设计JavaScript的时候,Unicode预计最多会有65536个字符,而从那以后它的容量慢慢增长到了拥有1百万个字符。

typeof

  typeof运算符返回一个用于识别运算数类型的字符串。但是它无法区分数组和对象。

parseInt

  它是一个将字符串转换为整数的函数,它在遇到非数字是会停止解析,所以parseInt("16")与parseInt("16 tons")产生相同的结果。

浮点数

  二进制的浮点书不能正确地处理十进制的小数,因此0.1+0.2不等于0.3.这是JavaScript中最经常被报告的bug,而且它是遵循二进制浮点数算数标准(IEEE 754)而有意导致的结果。

  但浮点数中的整数运算是精确的,所以小数表现出来的错误可以通过制定精度来避免。

NaN 

  它是IEEE 754中定义的一个特殊的数量值,它表示不是一个数字,尽管typeof NaN === ‘number’ //true.

  该值可能会在试图将非数字形式的字符串转换为数字是产生。

伪数组

  JavaScript中没有真正的数组,在JavaScript的数组中,不必给他们设置纬度,而且它们永远不会产生越界错误。

假值

  0、NaN、‘’(空字符串)、false、null、undefined

hasOwnProperty

  hasOwnProperty是一个方法,而不是一个运算符,所以在任何对象中,它可能会被一个不同的函数甚至一个非函数的值所替换。

对象

  JavaScript的对象中没有真的空对象,他们可以从原型链中取得成员元素。

时间: 2024-11-10 08:04:39

JavaScript语言精粹_糟粕的相关文章

JavaScript语言精粹_第九章

在软件的产品生命周期中,通常他们都会被修改,把一个正确的程序转化为另一个同样正确但风格不同的程序,是一个极具挑战性的过程. JavaScript包含大量脆弱的或有问题的特性,它们会妨碍我们写出优秀的程序.显然我们应该避免JavaScript中那些糟糕的特性,避免这些特性,就可以避免一大类潜在的错误. JavaScript的设计.实现和标准化的过程中,质量没有成为关注点,这增加了使用这门语言的用户避免其缺陷的难度.

JavaScript语言精粹_第四章

4.1 函数对象 在JavaScript中,函数就是对象.对象是"名/值"对的集合并拥有一个连到原型对象的隐藏链接.对象字面量产生的对象连接到Object.prototype.函数对象连接到Function.prototype(该原型对象本身连接到object.prototype) 每个函数对象在创建是也随带一个prototype属性,它的值是一个拥有constructor属性且至即为该函数的对象 函数可以存放变量,可以被当作参数传递给其他函数,也可以在返回函数. 因为函数是对象,所以

JavaScript语言精粹_鸡肋

== JavaScript有两组相等运算符:===,==,!==,!=,前面一组比较类型和数值,后面一组只比较数值. with语句 JavaScript提供了一个with语句,本意是想用来快捷地访问对象的属性.但它有时的结果可能是不可预料的,所以应该避免使用它. eval 使用eval形式的代码会更加难以阅读,这种形式将是的性能显著降低,因为它须运行编译器,但也许只是为了执行一个微不足道的赋值语句.它会让JSLint失效,因此该工具检测问题的能力也会显著降低. continue语句 代码通过重构

JavaScript语言精粹_第八章

JavaScript包含了少量可用在标准类型上的标准方法. Array array.concat(item...) 它包含array的浅复制并将1个或多个参数item附加在其后. array.join(separator) join方法将array构造成一个字符串,它将array中的每个元素构造成一个字符串,并用separate为分隔符把他们连接在一起,默认的separate是",",为了实现无间隔的连接,可以使用空字符串作为separate. array.pop() 移除array中

JavaScript语言精粹_第五章

5.1 伪类 它不让对象直接从其他对象继承,反而插入了一个多余的间接层,从而使构造器函数产生对象. JavaScript中,当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的一些代码 this.prototype = {constructor:this}; 新函数对象被赋予一个prototype属性,其值是包含一个constructor属性值为该新函数对象.该prototype对象是存放继承特征的地方.因为JavaScript没有提供一种方法去确定哪个函数是打算用来作构

Javascript语言精粹-毒瘤和糟粕

Javascript语言精粹-毒瘤和糟粕 博客分类: Web前端-JS语言核心 javascript 作者:zccst Javascript是一门语言,用久了肯定能够发现其中的好与不好的地方.不过大多数普通人没那么细心,所以也就忽略了,很难说出一二三来.但对于极客版的牛人就不同了,他们理解的远比普通人透彻. 二.糟粕(轻微) 一.毒瘤(严重) 1,全局变量 var foo = value; window.foo = value; foo = value; 隐患是很多时候是忘加var了 2,作用域

读《JavaScript语言精粹》的一些感言

最近看了<JavaScript语言精粹>,并且连着看了两遍,如果非要用言语形容的话,那我只能用4个字来形容:相见恨晚.其中的一些经验经过这么多年的摸索其实也了然,但是作者用这么浅薄的书把有着深厚蕴含的她深刻暴露出来的确值得我辈去拜读.JavaScript当初以风卷残云般的速度统治了浏览器端,其发布到正式成为ECMA规范也就1年多的时间,未经大规模检验的她,的确存在些糟粕性的语法,但其基于原型继承及函数式编程思想等等优秀的想法将其提升到语言的另一个层次上.以作者的话来说就是:JavaScript

JavaScript语言精粹 笔记01

内容比较简单,只是从头梳理一下JS的知识 语法空白标识符数字字符串语句 对象对象字面量检索更新引用原型反射枚举删除减少全局变量污染  语法 1 空白 空白可能表现为格式化字符或注释的形式.空白通常没有意义,但是偶尔必须用它来分割字符序列,否则它们就会被合并成一个单一的符号.例如: var that = this; var 和that之间的空格是不能去掉的,其他的空格都可以被移除. JS提供两种注释: /* */ // 建议使用//,因为/* */中要注释的内容可能包括字符 */ 而报错,例如:

javascript语言精粹----笔记【转载】

javascript语言精粹----笔记 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'number','string','boolean','undefined','function','object';其中typeof(null),结果是'object' 3.number类型总是64位浮点数,两个整数相除也可能出现非整数结果 4.如果第一个运算数的值为假,那么运算符&&产生它的第一个运算数的值.