var num = new Number(10); // This is encouraged. var num = 10; // This is discouraged (students will lose points for doing this).
我的教练没有区分这些,学生被告知要对待他们,就像他们是原始的数字,字符串等.尽管我至少认为,如果初学者不太懂得在必要时使用datatype.valueOf()并且根本不知道什么对象还没有.文字表示法(和我认为是)更恰当和标准,另一方面会造成混乱.由于它们是对象(而且我不希望学生担心),因此构造函数符号存在一致性问题.例如,这些对初学者没有意义:
var num1 = new Number(1); var num2 = new Number(1); if(num1 === num2) ... ; // Does not run. if(num1 == num2) ... ; // Does not run. if(num1 == 1) ... ; // But this does. var num2 = new Number(2); if(num1 < num2) ... ; // So does this. switch(num1){ case 1: ... // Does not run. break; default: ... // This runs break; }
正如你所看到的那样,只会让一个人正在学习一个if语句是令人困惑的.我感觉到她鼓励不好的做法,并且劝阻好的做法.那么你对于原始价值观的文字和构造函数符号之间有什么看法,这被认为是更加标准/正确的,哪个更适合初学者使用?
解决方法
现在老师自己,在JavaScript中使用构造函数不是那个地方.首先,它导致控制流程的不正当行为,这是编程开始步骤的重要部分.其次,通过在Web开发人员的工具包中错误地教授基本语言,使学生感到不安.最后,它不准备一个构造函数!作为一个附注,JavaScript不容易陷入任何典型的编程范式,因此不适合作为四年制大学课程中的第一语言(在本作者的意见中).
首先,看看控制流程.没有控制流程,初学者可能永远无法构建比Hello world更复杂的任何东西.初学者必须对控制流程篮中的每个项目有一个牢固的了解是至关重要的.一个好的教练将为每种类型提供几个例子,以及对真实与真实之间区别的完整解释.
构造函数完全破坏了初学者对控制流的理解,如下例所示:
var myBool = new Boolean(false); if (myBool) { console.log('yes'); } // 'yes' is logged to the console.
是的,这是JavaScript的‘wat’时刻之一.该语言应该如此行事吗?可能不会.可以?绝对.初学者需要看到简单的例子,对未启发的思想有意义.首次启动时边缘病例没有大脑空间.像这样的例子只会对教授应该教的人造成不满.
构造函数在JavaScript中没有任何地方
这个更有意见.一个警告:JavaScripters可能会发现一些使用构造函数来使用它们在类型之间进行转换(即Number(’10’)),但通常有更好的方法.
几乎每次JavaScript中都使用构造函数,这是一个滥用.我想,如果想要一个字面数字,只需写出来.不需要所有的额外的打字,更不用说使用构造函数的各种类型的冲突和隐藏的陷阱](https://stackoverflow.com/a/369450/1216976).
值得注意的是,JSLint和JSHint(由人比我更聪明的人写的)都不鼓励以这种方式使用构造函数.