Meaning of TypeError

时间:2016-12-09 13:02:09

标签: javascript error-handling compiler-errors

I am new to JavaScript and I don't get why the type of error that is thrown is called TypeError in the following code:

"use strict"
var ob = {a: 1}; 
Object.defineProperty( ob, 'B', {value: 2, writable:false} ); 
ob.B; // => 2   
ob.B = 10;  
ob.B; // => 2

It should throw something like UnassignableError, because I cannot assign the value 10.
Is there some value that I can assign to? What is the meaning of TypeError in JavaScript in this context?

2 个答案:

答案 0 :(得分:1)

来自 ECMAScript规范

  

当在严格模式代码中发生赋值时,其LeftHandSide不能求值为不可解析的引用。如果确实如此,则在赋值时抛出ReferenceError异常。 LeftHandSide也可能不是对具有属性值{[[Writable]]:false}的数据属性的引用,而是对具有属性值{[[Set]]:undefined}的访问者属性的引用,也不是对不存在的引用属性的引用[[Extensible]]内部属性值为false的对象的属性。在这些情况下,会抛出TypeError异常。

此错误仅在严格模式下发生。如果没有SELECT LEFT(SUBSTRING(col,1,CASE WHEN a= 0 THEN LEN(col) ELSE a-1 END),11) AS [ColA] ,REPLACE(SUBSTRING(col,a+1,b-a),'*','') AS [ColB] ,REPLACE(SUBSTRING(col,b+1,c-b),']','') AS [ColC] FROM @t CROSS APPLY( SELECT CHARINDEX('[',Col,0)A ,CHARINDEX('*',Col,0)B ,CHARINDEX(']',Col,0)C ) Z ,分配将失败,没有任何错误,会产生完全意外的结果。

答案 1 :(得分:0)

javascript中没有像PACKAGE/src/Makevars这样的内容。常见的错误列表可以在javascript中发生

<强>的EvalError     创建一个表示有关全局函数eval()的错误的实例。

<强> InternalError该     创建一个实例,表示在引发JavaScript引擎中的内部错误时发生的错误。例如。 “过多的递归”。

<强>的RangeError     创建一个实例,表示当数字变量或参数超出其有效范围时发生的错误。

<强>的ReferenceError     创建表示取消引用无效引用时发生的错误的实例。

<强>的SyntaxError     创建表示在解析eval()中的代码时发生的语法错误的实例。

<强>类型错误     创建一个实例,表示当变量或参数不是有效类型时发生的错误。

<强>的URIError     创建一个实例,表示在encodeURI()或decodeURI()传递无效参数时发生的错误。

因此在上面的错误中,TypeError将在带有解释的代码中作为错误抛出

Installing package into ‘/home/home/R/x86_64-pc-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
* installing *source* package ‘question1’ ...
** libs
gcc -I/usr/share/R/include -DNDEBUG -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c hello.c -o hello.o 
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o question1.so hello.o -std=gnu++11 -L/usr/lib/R/lib -lR
installing to /home/dgarolini/R/x86_64-pc-linux-gnu-library/3.1/question1/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (question1)