JSContext/JSValue

JSContext是运行JavaScript的上下文环境,是一个全局环境实例;类似于浏览器端的window对象,表示浏览器的窗口;在浏览器中,所有JavaScript全局对象、属性、方法均自动成为window对象的成员。创建一个JSContext后,可以很容易地运行JavaScript代码创建变量、方法,进行相应计算,Swift中使用方法如下:

let context = JSContext()
context.evaluateScript("var num = 12")
context.evaluateScript("var result = function(value) {return value * 3}")
let tripleNum: JSValue = context.evaluateScript("triple(num)")
print("Tripled: \(tripleNum.toInt32())")

任何出自JSContext的值都被包裹在一个JSValue对象中,不管是字符串、数字、数组、对象和方法等;JavaScript中的错误(null)和特殊值(undefined)也会包含在其中。

JSValue提供一系列方法用于转换JavaScript类型到Obejective-C和Swift。

使用下标值访问上下文context中的值

JSContext使用字符串作为下标,类似于JavaScript中的属性字典;JSValue允许使用字符串或者整数来得到里面的对象。

context.evaluateScript("var stringArray = ['first', 'second', 'third']")
let str = context.objectForKeyedSubscript("stringArray")
let firstStr = str.objectAtIndexedSubscript(0)
print("The first str : \(firstStr.toString())")

Swift调用JavaScript函数

通过context的 objectForKeyedSubscript方法获取JS中属性对应的方法,通过 callWithArguments方法实现方法的调用,注意参数是对象,传入参数数组对象。代码如下:

let jsFunction = context.objectForKeyedSubscript("result")
let addResult = jsFunction.callWithArguments([5])
print("Result :\(addResult.toInt32())")

捕获JS执行中的异常

JS执行环境JSContext中有个exceptionHandler属性,通过该属性对应的回调方法可以得到JS执行中的异常,代码如下:

context.exceptionHandler = {context, exception in
print("JS Error: \(exception)")
}
context.evaluateScript("function multiply(value1, value2) { return value1 * value2")

输出结果如下:

Tripled: 36
The first str : first
Result :15
JS Error: SyntaxError: Unexpected end of script

学习资料:http://nshipster.cn/javascriptcore/

JSC学习笔记:JavaScriptCore 初识的更多相关文章

  1. Storm学习笔记 - Storm初识

    Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...

  2. LevelDB学习笔记 (1):初识LevelDB

    LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...

  3. Java学习笔记心得——初识Java

    初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...

  4. NuGet学习笔记1——初识NuGet及快速安装使用

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...

  5. NuGet学习笔记(1) 初识NuGet及快速安装使用

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...

  6. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  7. NuGet学习笔记(1)——初识NuGet及快速安装使用

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...

  8. NuGet学习笔记(1)——初识NuGet及快速安装使用(转)

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...

  9. NuGet学习笔记(1) 初识NuGet及快速安装使用[转]

    来自:http://www.cnblogs.com/lzrabbit/archive/2012/05/01/2477607.html 关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学 ...

随机推荐

  1. HDU 2653 - Waiting ten thousand years for Love

    首先,对于一个 '@' 飞上去,飞下来都要耗1点魔力,所以是两点= = 然后站在同一格 魔力可能不同,所以要增加一维. 还有当前搜到的不一定是最小. 别的也没啥. #include <iostr ...

  2. Error:Execution failed for task ':app:mergeDebugResources'. > Some file crunching failed, see logs for details

    Android Studio 编译中断.... Error:Execution failed for task ':app:mergeDebugResources'. > Some file c ...

  3. java 小数点取2位并且四舍五入

    BigDecimal bd = new BigDecimal(0.0199999999999); System.out.println("res:"+bd.setScale(2, ...

  4. 国外大神Leo-G的 DevopsWiki

    https://raw.githubusercontent.com/Leo-G/DevopsWiki/master/README.md 总结的太好了,直接把md文件贴过来好了!慢慢学习!分享给大家,觉 ...

  5. Django学习(二) Django框架简单搭建

    为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...

  6. UVA 712 S-Trees

    二叉树? 怒水~~ 注意一下查询与x值的对应关系就好~ #include <iostream> #include <cstring> #include <cstdio&g ...

  7. js对象中什么是可枚举性(enumerable)?

    说到枚举,可能很多人都会想到枚举类型,但在javascript对象中有一个属性为可枚举性,他是什么呢? 概念 可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之 ...

  8. Performance of Transport Control Protocol over Dynamic Spectrum Access Links

    2007 IEEE 这篇论文主要就是分析了几个版本的TCP协议在DSA网络中的性能问题. 得出的结论是: 大部分现在在用的几个版本的TCP协议,都是能够较好地适应DSA环境,吞吐率都能达到95%.当然 ...

  9. USB学习小记-HID类键盘的报告描述符的理解

    前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...

  10. 网路流程图 TCP/IP