mirror of
https://github.com/robertkrimen/otto
synced 2025-09-28 18:45:22 +08:00
342 lines
8.6 KiB
Markdown
342 lines
8.6 KiB
Markdown
Package otto is a JavaScript parser and interpreter written natively in
|
|
Go.
|
|
|
|
// Create a new runtime
|
|
Otto := otto.New()
|
|
Otto.Run(`
|
|
abc = 2 + 2
|
|
console.log("The value of abc is " + abc)
|
|
// The value of abc is 4
|
|
`)
|
|
value, err := Otto.Get("abc")
|
|
{
|
|
// value is an int64 with a value of 4
|
|
value, _ := value.ToInteger()
|
|
}
|
|
Otto.Set("def", 11)
|
|
Otto.Run(`
|
|
console.log("The value of def is " + def)
|
|
// The value of def is 11
|
|
`)
|
|
Otto.Set("xyzzy", "Nothing happens.")
|
|
Otto.Run(`
|
|
console.log(xyzzy.length) // 16
|
|
`)
|
|
value, _ = Otto.Run("xyzzy.length")
|
|
{
|
|
// value is an int64 with a value of 16
|
|
value, _ := value.ToInteger()
|
|
}
|
|
value, err = Otto.Run("abcdefghijlmnopqrstuvwxyz.length")
|
|
if err != nil {
|
|
// err = ReferenceError: abcdefghijlmnopqrstuvwxyz is not defined
|
|
// If there is an error, then value.IsUndefined() is true
|
|
...
|
|
}
|
|
|
|
### AUTHOR
|
|
|
|
Robert Krimen <robertkrimen@gmail.com>
|
|
|
|
### USAGE
|
|
|
|
--
|
|
type FunctionCall struct {
|
|
This Value
|
|
|
|
ArgumentList []Value
|
|
}
|
|
**FunctionCall** is an enscapulation of a JavaScript function call.
|
|
|
|
--
|
|
func (self FunctionCall) Argument(index int) Value
|
|
**Argument** will return the value of the argument at the given index.
|
|
|
|
If no such argument exists, undefined is returned.
|
|
|
|
--
|
|
type Object struct {
|
|
}
|
|
**Object** is the representation of a JavaScript object.
|
|
|
|
--
|
|
func (self Object) Call(this Value, argumentList ...interface{}) (Value, error)
|
|
**Call** the object as a function with the given this value and argument
|
|
list and return the result of invocation. It is essentially equivalent
|
|
to:
|
|
|
|
self.apply(thisValue, argumentList)
|
|
|
|
An undefined value and an error will result if:
|
|
|
|
1. There is an error during conversion of the argument list
|
|
2. The object is not actually a function
|
|
3. An (uncaught) exception is thrown
|
|
|
|
--
|
|
func (self Object) Class() string
|
|
**Class** will return the class string of the object.
|
|
|
|
The return value will (generally) be one of:
|
|
|
|
Object
|
|
Function
|
|
Array
|
|
String
|
|
Number
|
|
Boolean
|
|
Date
|
|
RegExp
|
|
|
|
--
|
|
func (self Object) Get(name string) (Value, error)
|
|
**Get** the value of the property with the given name.
|
|
|
|
--
|
|
func (self Object) Set(name string, value interface{}) error
|
|
**Set** the property of the given name to the given value.
|
|
|
|
An error will result if the setting the property triggers an exception
|
|
(i.e. read-only), or there is an error during conversion of the given
|
|
value.
|
|
|
|
--
|
|
type Otto struct {
|
|
}
|
|
**Otto** is the representation of the JavaScript runtime. Each instance of
|
|
Otto has a self-contained namespace.
|
|
|
|
--
|
|
func New() *Otto
|
|
**New** will allocate a new JavaScript runtime
|
|
|
|
--
|
|
func Run(source string) (*Otto, Value, error)
|
|
**Run** will allocate a new JavaScript runtime, run the given source on the
|
|
allocated runtime, and return the runtime, resulting value, and error
|
|
(if any).
|
|
|
|
--
|
|
func (self Otto) Get(name string) (Value, error)
|
|
**Get** the value of the top-level binding of the given name.
|
|
|
|
If there is an error (like the binding not existing), then the value
|
|
will be undefined.
|
|
|
|
--
|
|
func (self Otto) Object(source string) (*Object, error)
|
|
**Object** will run the given source and return the result as an object.
|
|
|
|
For example, accessing an existing object:
|
|
|
|
object, _ := Otto.Object(`Number`)
|
|
|
|
Or, creating a new object:
|
|
|
|
object, _ := Otto.Object(`{ xyzzy: "Nothing happens." }`)
|
|
|
|
Or, creating and assigning an object:
|
|
|
|
object, _ := Otto.Object(`xyzzy = {}`)
|
|
object.Set("volume", 11)
|
|
|
|
If there is an error (like the source does not result in an object),
|
|
then nil and an error is returned.
|
|
|
|
--
|
|
func (self Otto) Run(source string) (Value, error)
|
|
**Run** will run the given source (parsing it first), returning the
|
|
resulting value and error (if any)
|
|
|
|
If the runtime is unable to parse the source, then this function will
|
|
return undefined and the parse error (nothing will be evaluated in this
|
|
case).
|
|
|
|
--
|
|
func (self Otto) Set(name string, value interface{}) error
|
|
**Set** the top-level binding of the given name to the given value.
|
|
|
|
Set will automatically apply ToValue to the given value in order to
|
|
convert it to a JavaScript value (type Value).
|
|
|
|
If there is an error (like the binding being read-only, or the ToValue
|
|
conversion failing), then an error is returned.
|
|
|
|
If the top-level binding does not exist, it will be created.
|
|
|
|
--
|
|
type Value struct {
|
|
}
|
|
**Value** is the representation of a JavaScript value.
|
|
|
|
--
|
|
func FalseValue() Value
|
|
**FalseValue** will return a value represting false.
|
|
|
|
It is equivalent to:
|
|
|
|
ToValue(false)
|
|
|
|
--
|
|
func NaNValue() Value
|
|
**NaNValue** will return a value representing NaN.
|
|
|
|
It is equivalent to:
|
|
|
|
ToValue(math.NaN())
|
|
|
|
--
|
|
func NullValue() Value
|
|
**NullValue** will return a Value representing null.
|
|
|
|
--
|
|
func ToValue(value interface{}) (Value, error)
|
|
|
|
--
|
|
func TrueValue() Value
|
|
**TrueValue** will return a value represting true.
|
|
|
|
It is equivalent to:
|
|
|
|
ToValue(true)
|
|
|
|
--
|
|
func UndefinedValue() Value
|
|
**UndefinedValue** will return a Value representing undefined.
|
|
|
|
--
|
|
func (value Value) Call(this Value, argumentList ...interface{}) (Value, error)
|
|
**Call** the value as a function with the given this value and argument list
|
|
and return the result of invocation. It is essentially equivalent to:
|
|
|
|
value.apply(thisValue, argumentList)
|
|
|
|
An undefined value and an error will result if:
|
|
|
|
1. There is an error during conversion of the argument list
|
|
2. The value is not actually a function
|
|
3. An (uncaught) exception is thrown
|
|
|
|
--
|
|
func (value Value) Class() string
|
|
**Class** will return the class string of the value or the empty string if
|
|
value is not an object.
|
|
|
|
The return value will (generally) be one of:
|
|
|
|
Object
|
|
Function
|
|
Array
|
|
String
|
|
Number
|
|
Boolean
|
|
Date
|
|
RegExp
|
|
|
|
--
|
|
func (value Value) IsBoolean() bool
|
|
**IsBoolean** will return true if value is a boolean (primitive).
|
|
|
|
--
|
|
func (value Value) IsDefined() bool
|
|
**IsDefined** will return false if the value is undefined, and true
|
|
otherwise.
|
|
|
|
--
|
|
func (value Value) IsFunction() bool
|
|
**IsFunction** will return true if value is a function.
|
|
|
|
--
|
|
func (value Value) IsNaN() bool
|
|
**IsNaN** will return true if value is NaN (or would convert to NaN).
|
|
|
|
--
|
|
func (value Value) IsNull() bool
|
|
**IsNull** will return true if the value is null, and false otherwise.
|
|
|
|
--
|
|
func (value Value) IsNumber() bool
|
|
**IsNumber** will return true if value is a number (primitive).
|
|
|
|
--
|
|
func (value Value) IsObject() bool
|
|
**IsObject** will return true if value is an object.
|
|
|
|
--
|
|
func (value Value) IsPrimitive() bool
|
|
**IsPrimitive** will return true if value is a primitive (any kind of
|
|
primitive).
|
|
|
|
--
|
|
func (value Value) IsString() bool
|
|
**IsString** will return true if value is a string (primitive).
|
|
|
|
--
|
|
func (value Value) IsUndefined() bool
|
|
**IsUndefined** will return true if the value is undefined, and false
|
|
otherwise.
|
|
|
|
--
|
|
func (value Value) Object() *Object
|
|
**Object** will return the object of the value, or nil if value is not an
|
|
object.
|
|
|
|
This method will not do any implicit conversion. For example, calling
|
|
this method on a string primitive value will not return a String object.
|
|
|
|
--
|
|
func (value Value) String() string
|
|
**String** will return the value as a string.
|
|
|
|
This method will make return the empty string if there is an error.
|
|
|
|
--
|
|
func (value Value) ToBoolean() (bool, error)
|
|
**ToBoolean** will convert the value to a boolean (bool).
|
|
|
|
ToValue(0).ToBoolean() => false
|
|
ToValue("").ToBoolean() => false
|
|
ToValue(true).ToBoolean() => true
|
|
ToValue(1).ToBoolean() => true
|
|
ToValue("Nothing happens").ToBoolean() => true
|
|
|
|
If there is an error during the conversion process (like an uncaught
|
|
exception), then the result will be false and an error.
|
|
|
|
--
|
|
func (value Value) ToFloat() (float64, error)
|
|
**ToFloat** will convert the value to a number (float64).
|
|
|
|
ToValue(0).ToFloat() => 0.
|
|
ToValue(1.1).ToFloat() => 1.1
|
|
ToValue("11").ToFloat() => 11.
|
|
|
|
If there is an error during the conversion process (like an uncaught
|
|
exception), then the result will be 0 and an error.
|
|
|
|
--
|
|
func (value Value) ToInteger() (int64, error)
|
|
**ToInteger** will convert the value to a number (int64).
|
|
|
|
ToValue(0).ToInteger() => 0
|
|
ToValue(1.1).ToInteger() => 1
|
|
ToValue("11").ToInteger() => 11
|
|
|
|
If there is an error during the conversion process (like an uncaught
|
|
exception), then the result will be 0 and an error.
|
|
|
|
--
|
|
func (value Value) ToString() (string, error)
|
|
**ToString** will convert the value to a string (string).
|
|
|
|
ToValue(0).ToString() => "0"
|
|
ToValue(false).ToString() => "false"
|
|
ToValue(1.1).ToString() => "1.1"
|
|
ToValue("11").ToString() => "11"
|
|
ToValue('Nothing happens.').ToString() => "Nothing happens."
|
|
|
|
If there is an error during the conversion process (like an uncaught
|
|
exception), then the result will be the empty string ("") and an error.
|
|
|
|
|