Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@Suketta

GASのV8では [JavaObject] が [Object] になる

More than 1 year has passed since last update.

概要

GAS で V8ランタイムが使えるようになった件について:(V8 Runtime Overview)

G Suite Services の FoobarApp 系オブジェクトは
Object.prototype.toString.call() でタイプ名を取得すると
従来の Rhino では [object JavaObject] が返ってきましたが・・・

V8ランタイムに切り替えると [object Object] になります。

確認

function foo(){
  var objects = {
    calendar : CalendarApp.getDefaultCalendar(),
    folder   : DriveApp.getFolderById( 'root' ),
    file     : DriveApp.createFile( 'test', '' ),
    document : DocumentApp.create( 'test' ),
    spread   : SpreadsheetApp.create( 'test' )
  }

  for ( item in objects ){
    console.log( item + ' : ' 
      + Object.prototype.toString.call( objects[ item ] ) );
  }
  /*
  --- Rhino ---
  calendar : [object JavaObject]
  folder : [object JavaObject]
  file : [object JavaObject]
  document : [object JavaObject]
  spread : [object JavaObject]

  --- V8 ---
  calendar : [object Object]
  folder : [object Object]
  file : [object Object]
  document : [object Object]
  spread : [object Object]
  */
}

影響

[object Object] になることで、従来使えなかったメソッドが使えたりします。
例えばプロパティ名の列挙に使う Object.getOwnPropertyNames()

function bar(){
  var obj = CalendarApp.getDefaultCalendar();
  console.log( Object.getOwnPropertyNames( obj ).length );
  /*
  --- Rhino ---
  TypeError: オブジェクト型の引数が必要ですが、object 型が返されました。
                         ↑ 何言ってんのお前
  --- V8 ---
  28.0
  */
}

注意

型名チェックに === '[object JavaObject]' などとやっている場合は
挙動が変わるので修正が必要です。

その他

従来の Rhino から V8 へ切り替える為のポイントがまとめられていますが
この件についてはどこにも記載を見つけられませんでした。少なくとも今は。

Migrating scripts to the V8 runtime
(Qiita) GASがV8エンジンに対応したのでドキュメント読んだ

以上

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Suketta

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?