如何检测变量是不是包含任何内容

Posted

技术标签:

【中文标题】如何检测变量是不是包含任何内容【英文标题】:how to detect if a variable contains anything如何检测变量是否包含任何内容 【发布时间】:2019-05-08 14:05:17 【问题描述】:

我正在创建一个网站,如果您的位置未被阻止,则仅允许用户访问该网站,我试图创建如果位置不存在,则不允许该用户

我尝试过使用

if (typeof(showPosition)=="undefined") 
   document.getElementById("x").innerhtml = "object is null ";

if (!showPosition)
  document.getElementById("x").innerHTML = "object is null ";

if (showPosition == "null")
  document.getElementById("x").innerHTML = "object is null ";

但以上方法均无效。

这是我的两个函数

  if (navigator.geolocation) 
    navigator.geolocation.getCurrentPosition(showPosition, showError);
   else  
    x.innerHTML = "Geolocation is not supported by this browser.";
  


function showPosition(position) 
  x.innerHTML = "Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;

【问题讨论】:

包含您所说的行的代码在哪里?据我所知,您还没有定义一个名为 showPosition 的变量 你定义的函数叫做showPosition,所以它是typeof showPosition === "function" 尝试if ( showPosition === undefined ) 与三重等于=== 该函数不返回任何内容,它是异步调用的,所以没有意义。 所有关于检查的 cmets 都是无用的,因为 OP 试图做的事情是不可能的。必须改变逻辑才能使其正常工作。 【参考方案1】:

我理解您的问题的方式是,您希望允许用户访问,前提是他们的浏览器具有定位功能并允许访问,这是一个可能有帮助的解决方案:

if (!navigator.geolocation) 
    // Location does not exist, do what you wanna do

    // Always remember to exit your functions early
    return;


// Location exists, proceed to ask for location permissions
navigator.geolocation.getCurrentPosition(showPosition, showError);

// Function to call when permission granted
function showPosition(location) 
    x.innerHTML = "Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude;


// Function to call when permission denied
function showError(error) 
    // error has code and message; goto: https://developer.mozilla.org/en-US/docs/Web/API/PositionError

希望能解决你的问题

以后如果你想测试一个变量是否有任何值,只需这样做:

if (typeof variable === 'undefined' || variable === null) 
    // variable is either undefined or null, so basically does not contain anything

如果你这样做:

if (!variable) 
    // variable is either undefined or null, so basically does not contain anything

如果变量的值为 0 或为空字符串 ('')(包括 undefinednull),这将返回 true。

【讨论】:

如果我这样做 var test = "" if (typeof test === 'undefined' || test === null) document.getElementById("demo").innerHTML = "object is null "; ,那么它不会显示任何内容,但如果我这样做 if (typeof test1 === 'undefined' || test1 === null) 然后它说“对象为空”,所以它似乎没有工作跨度> 是的,因为当您将test 变量分配给空字符串时,它不再是undefined,而是现在的string,现在当您执行typeof test === 'string' 时,它将返回true。这解释了为什么第一个条件失败而最后一个条件通过,因为在最后一个场景中,您没有为变量 test1 分配任何东西,因此它未定义 如果它是一个空字符串,它应该归类为 null @DasShield null 和空字符串是两个不同的非常独立的东西,null 表示没有值,空字符串表示有一个值是字符串并且值是空字符串,继续做@987654335 @ 和 typeof '' 并观察输出 如果它解决了你的问题,请接受这个答案【参考方案2】:

似乎普遍缺乏对geoLocation api 的理解。 mdn website 会很有帮助,但要让你开始,试试这个 sn-p:

这是一个 codepen 版本,因为 *** 显然阻止了它的 sn-ps 访问用户位置 (https://codepen.io/anon/pen/VOvrwb)

const NOT_SUPPORTED_BY_BROWSER = 0, SUPPORTED_BUT_BLOCKED = 1, SUPPORTED_AND_ALLOWED = 2;

let getGeoLocationStatus = () => 
  if (!navigator.geolocation)
    return Promise.reject(NOT_SUPPORTED_BY_BROWSER);

  return new Promise((resolve, reject) =>
      navigator.geolocation.getCurrentPosition(
          position => resolve(position),
          () => reject(SUPPORTED_BUT_BLOCKED)))
;

let x = document.getElementById("x");

getGeoLocationStatus().then(position => 
  x.innerHTML = "Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude;
).catch(reason => 
  x.innerHTML = reason === NOT_SUPPORTED_BY_BROWSER ? 'Geolocation is not supported by this browser.' : 'blocked by user';
);
&lt;div id="x"&gt;&lt;/div&gt;

【讨论】:

请在您的代码中添加一些解释,以便 OP 可以从中学习 没有太多我可以添加的内容尚未在 wiki 上。满足他们用例的简短 sn-p 应该足以让他们走上正确的道路【参考方案3】:

用 Promise 试试看:

//this is the function you wanna test it returns
function showPosition()
    //Do some staff
    return 1;

//Creating a promise 
var promise = new Promise(function(resolve, reject) 
  try
    let sp = showPosition();
    if( sp !== undefined && sp !== null )
        resolve(sp);
    else
        reject(err);
    
  catch
    reject(err);
  
);

promise.then((res)=> 
    console.log('response of function is '+res);
).catch((err)=>
    console.debug('erreur'+err);
);

【讨论】:

以上是关于如何检测变量是不是包含任何内容的主要内容,如果未能解决你的问题,请参考以下文章

如何检测表单集在模板中是不是有任何错误?

如何使用 JavaScript 检测 CSS 变量支持?

如何检测变量是不是为字符串

如何检测变量是不是为数组

如何检测变量是不是为数组

检测 iframe src 是不是可显示