mirror of
https://github.com/robertkrimen/otto
synced 2025-10-12 20:27:30 +08:00
Fix HasInstace (instanceof) to return false
Should not TypeError panic on a non-Object
This commit is contained in:
parent
795cc4935d
commit
aaa90bf65c
|
@ -250,7 +250,7 @@ func (self *_runtime) calculateBinaryOperation(operator string, left Value, righ
|
|||
case "instanceof":
|
||||
rightValue := self.GetValue(right)
|
||||
if !rightValue.IsObject() {
|
||||
panic(newTypeError())
|
||||
panic(newTypeError("Expecting a function in instanceof check, but got: %v", rightValue))
|
||||
}
|
||||
return toValue(rightValue._object().HasInstance(leftValue))
|
||||
|
||||
|
|
13
otto_test.go
13
otto_test.go
|
@ -1159,15 +1159,24 @@ func TestParenthesizing(t *testing.T) {
|
|||
test("jkl", "true")
|
||||
}
|
||||
|
||||
func TestInstanceOf(t *testing.T) {
|
||||
func Test_instanceof(t *testing.T) {
|
||||
Terst(t)
|
||||
|
||||
test := runTest()
|
||||
|
||||
test(`
|
||||
abc = {} instanceof Object
|
||||
abc = {} instanceof Object;
|
||||
`)
|
||||
test("abc", "true")
|
||||
|
||||
test(`
|
||||
abc = "abc" instanceof Object;
|
||||
`)
|
||||
test("abc", "false")
|
||||
|
||||
test(`raise:
|
||||
abc = {} instanceof "abc";
|
||||
`, "TypeError: Expecting a function in instanceof check, but got: abc")
|
||||
}
|
||||
|
||||
func TestIn(t *testing.T) {
|
||||
|
|
|
@ -69,7 +69,7 @@ func (self *_object) CallSet(name string, value Value) {
|
|||
// 15.3.5.3
|
||||
func (self *_object) HasInstance(of Value) bool {
|
||||
if !of.IsObject() {
|
||||
panic(newTypeError())
|
||||
return false
|
||||
}
|
||||
prototype := self.get("prototype")
|
||||
if !prototype.IsObject() {
|
||||
|
|
Loading…
Reference in New Issue
Block a user