繁体   English   中英

如何获取javascript对象(如窗口而不是字符串[object])的数值或字符串值

[英]How do I get a numeric or string value for a javascript object such as window instead of the string [object]

如何获取javascript对象(如窗口而不是字符串[object])的数值或字符串值

寻找类似对象id的东西,如44001或0xFF0012,对于该对象是唯一的

Javascript没有为每个对象保留类似python的唯一哈希值。 您可以创建一个函数来为对象分配唯一的字符串,或者检索已经分配的字符串。

var getUniqueId = (function(){

  // uncomment this block if you want to avoid memory leaks
  // in browsers with crappy garbage collectors.
  /*
  try {
    window.addEventListener('unload', cleanup);
    window.addEventListener('beforeunload', cleanup);
  } catch (_) { try {
    window.attachEvent('onunload', cleanup);
    window.attachEvent('onbeforeunload', cleanup);
  } catch (__){}}

  function cleanup () { guid.knownObjects.length=0; }
  */

  guid.knownObjects=[];

  return guid;

  function guid (obj) {
    for (var i=guid.knownObjects.length; i--;) {
      if (guid.knownObjects[i][0]===obj) return guid.knownObjects[i][1];
    }
    var uid='x'+(+(''+Math.random()).substring(2)).toString(32);
    guid.knownObjects.push([obj, uid]);
    return uid;
  }

}());

测试出来:

getUniqueId(window)
> "x7onn8ne58ug"

getUniqueId(document)
> "x9jeriqjdf9o"

getUniqueId(document)
> "x9jeriqjdf9o"

getUniqueId(window)
> "x7onn8ne58ug"

您可以执行console.dir(getUniqueId.knownObjects)以获取一些有用的调试信息。

getUniqueId.knownObjects
> [
  Array
  0: DOMWindow
  1: "x7onn8ne58ug"
  , 
  Array
  0: HTMLDocument
  1: "x9jeriqjdf9o"
  ]

Javascript没有唯一标识符的本机支持。

您可以更改Object原型以包含一个。

检查此线程: JavaScript Object Id

你希望看到什么样的window字符串表示?

为JS运行时提供toString实现的对象负责自己的值。 因此像HTMLElement这样的对象可以返回其toStringinnerHTML 但它没有,所以默认是类型名称。

您可以编写这样的基本调试,将对象作为o传递:

function debug(o){
   var r = '';
   for (var k in o){
      r += k + ' => ' + o[k] + '\n';
   }
   window.alert(r);
}

或者您可以搜索与此类似的转储或print_r: http ://geekswithblogs.net/svanvliet/archive/2006/03/23/simple-javascript-object-dump-function.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM