diff --git a/fxjs/cfx_globalarray.cpp b/fxjs/cfx_globalarray.cpp
index 4fbaba1..6d0b6e5 100644
--- a/fxjs/cfx_globalarray.cpp
+++ b/fxjs/cfx_globalarray.cpp
@@ -13,54 +13,11 @@
 
 CFX_GlobalArray::CFX_GlobalArray() = default;
 
+CFX_GlobalArray::CFX_GlobalArray(CFX_GlobalArray&& that) = default;
+
 CFX_GlobalArray::~CFX_GlobalArray() = default;
 
-CFX_GlobalArray& CFX_GlobalArray::operator=(const CFX_GlobalArray& that) {
-  if (this == &that)
-    return *this;
-
-  m_Array.clear();
-  for (size_t i = 0, sz = that.Count(); i < sz; i++) {
-    CFX_KeyValue* pOldObjData = that.GetAt(i);
-    switch (pOldObjData->nType) {
-      case CFX_KeyValue::DataType::NUMBER: {
-        auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>();
-        pNewObjData->sKey = pOldObjData->sKey;
-        pNewObjData->nType = pOldObjData->nType;
-        pNewObjData->dData = pOldObjData->dData;
-        Add(std::move(pNewObjData));
-      } break;
-      case CFX_KeyValue::DataType::BOOLEAN: {
-        auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>();
-        pNewObjData->sKey = pOldObjData->sKey;
-        pNewObjData->nType = pOldObjData->nType;
-        pNewObjData->bData = pOldObjData->bData;
-        Add(std::move(pNewObjData));
-      } break;
-      case CFX_KeyValue::DataType::STRING: {
-        auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>();
-        pNewObjData->sKey = pOldObjData->sKey;
-        pNewObjData->nType = pOldObjData->nType;
-        pNewObjData->sData = pOldObjData->sData;
-        Add(std::move(pNewObjData));
-      } break;
-      case CFX_KeyValue::DataType::OBJECT: {
-        auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>();
-        pNewObjData->sKey = pOldObjData->sKey;
-        pNewObjData->nType = pOldObjData->nType;
-        pNewObjData->objData = pOldObjData->objData;
-        Add(std::move(pNewObjData));
-      } break;
-      case CFX_KeyValue::DataType::NULLOBJ: {
-        auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>();
-        pNewObjData->sKey = pOldObjData->sKey;
-        pNewObjData->nType = pOldObjData->nType;
-        Add(std::move(pNewObjData));
-      } break;
-    }
-  }
-  return *this;
-}
+CFX_GlobalArray& CFX_GlobalArray::operator=(CFX_GlobalArray&& array) = default;
 
 void CFX_GlobalArray::Add(std::unique_ptr<CFX_KeyValue> pKeyValue) {
   m_Array.push_back(std::move(pKeyValue));
diff --git a/fxjs/cfx_globalarray.h b/fxjs/cfx_globalarray.h
index a943860..e7e0bde 100644
--- a/fxjs/cfx_globalarray.h
+++ b/fxjs/cfx_globalarray.h
@@ -15,9 +15,12 @@
 class CFX_GlobalArray {
  public:
   CFX_GlobalArray();
+  CFX_GlobalArray(const CFX_GlobalArray& that) = delete;
+  CFX_GlobalArray(CFX_GlobalArray&& that);
   ~CFX_GlobalArray();
 
-  CFX_GlobalArray& operator=(const CFX_GlobalArray& array);
+  CFX_GlobalArray& operator=(const CFX_GlobalArray& array) = delete;
+  CFX_GlobalArray& operator=(CFX_GlobalArray&& array);
 
   void Add(std::unique_ptr<CFX_KeyValue> pKeyValue);
   size_t Count() const;
diff --git a/fxjs/cfx_globaldata.cpp b/fxjs/cfx_globaldata.cpp
index f199025..c6f9e91 100644
--- a/fxjs/cfx_globaldata.cpp
+++ b/fxjs/cfx_globaldata.cpp
@@ -147,20 +147,20 @@
 }
 
 void CFX_GlobalData::SetGlobalVariableObject(ByteString sPropName,
-                                             const CFX_GlobalArray& array) {
+                                             CFX_GlobalArray array) {
   if (!TrimPropName(&sPropName))
     return;
 
   CFX_GlobalData::Element* pData = GetGlobalVariable(sPropName);
   if (pData) {
     pData->data.nType = CFX_KeyValue::DataType::OBJECT;
-    pData->data.objData = array;
+    pData->data.objData = std::move(array);
     return;
   }
   auto pNewData = pdfium::MakeUnique<CFX_GlobalData::Element>();
   pNewData->data.sKey = std::move(sPropName);
   pNewData->data.nType = CFX_KeyValue::DataType::OBJECT;
-  pNewData->data.objData = array;
+  pNewData->data.objData = std::move(array);
   m_arrayGlobalData.push_back(std::move(pNewData));
 }
 
diff --git a/fxjs/cfx_globaldata.h b/fxjs/cfx_globaldata.h
index dac044c..b567017 100644
--- a/fxjs/cfx_globaldata.h
+++ b/fxjs/cfx_globaldata.h
@@ -44,8 +44,7 @@
   void SetGlobalVariableNumber(ByteString propname, double dData);
   void SetGlobalVariableBoolean(ByteString propname, bool bData);
   void SetGlobalVariableString(ByteString propname, const ByteString& sData);
-  void SetGlobalVariableObject(ByteString propname,
-                               const CFX_GlobalArray& array);
+  void SetGlobalVariableObject(ByteString propname, CFX_GlobalArray array);
   void SetGlobalVariableNull(ByteString propname);
   bool SetGlobalVariablePersistent(ByteString propname, bool bPersistent);
   bool DeleteGlobalVariable(ByteString propname);
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 5b548cd..fd3a9ac 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -400,7 +400,7 @@
         v8::Local<v8::Object> obj =
             v8::Local<v8::Object>::New(GetIsolate(), pData->pData);
         ObjectToArray(pRuntime, obj, &array);
-        m_pGlobalData->SetGlobalVariableObject(name, array);
+        m_pGlobalData->SetGlobalVariableObject(name, std::move(array));
         m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
       } break;
       case CFX_KeyValue::DataType::NULLOBJ:
