首页 > 其他分享 >JS判断变量是否存在或已定义

JS判断变量是否存在或已定义

时间:2023-08-30 09:33:25浏览次数:40  
标签:console log 未定义 undefined JS window 变量 定义

前言:因需求修改了公共文件,导致引入公共文件的部分页面因未引入来源js会报错,所以需要在公共文件中增加判断变量是否存在。

为了确保代码的可靠性,应该对变量的定义进行检查,从而避免代码在运行时执行错误或不可预期的错误。

一、typeof

if (typeof myVar === 'undefined') {
  // myVar (未定义) 或 (已定义但未初始化)
} else {
  // myVar (已定义和已初始化)
}

二、使用try/catch

// missingVar 未定义
try {
  missingVar;
  console.log('missingVar 已定义')
} catch(e) {
  e; // => "ReferenceError: missingVar is not defined"
  console.log('missingVar 未定义');
}
// logs 'missingVar 未定义'

三、使用in运算符

in运算符被用来检测对象是否包含某个属性,如果变量未定义,则in运算符将返回false。

var obj = {};
if ('x' in obj) {
    console.log("x is defined in obj");
} else {
    console.log("x is not defined in obj"); //输出 "x is not defined in obj"
}

四、使用undefined关键字

undefined是JavaScript中一个特殊的关键字,代表着未定义的值。如果变量未定义,则可以通过检查变量是否等于undefined来判断变量是否已经定义。

var x;
if (x === undefined) {
    console.log("x is undefined");
}

结合:

var x;
if (typeof x !== 'undefined' && x !== null) {
    console.log("x is defined");
} else {
    console.log("x is undefined");
}

五、使用window对象

在浏览器中,全局变量都是window对象的属性。可以通过检查window对象是否包含该变量的属性来判断变量是否已经定义。

if (window.x) {
    console.log("x is defined");
} else {
    console.log("x is undefined");
}

六、window.hasOwnProperty()

每个全局变量都存储为全局对象的一个​​属性(window在浏览器环境中,global在 NodeJS 中)。

可以用来确定是否定义了全局变量myGlobalVar

只需检查全局对象是否存在相应的属性:window.hasOwnProperty('myGlobalVar')   这种方法对于检查浏览器是否支持 web API 很有用。

var变量和function声明,当在最外层范围(也称为全局范围)中使用时,会在全局对象上创建属性:

// 外部范围
var num = 19;
function greet() {
  return 'Hello!';
}
window.hasOwnProperty('num');   // => true
window.hasOwnProperty('greet'); // => true

但是,请注意,constlet变量,以及class声明不会在全局对象上创建属性:

// 外部范围
const pi = 3.14;
let message = 'Hi!';
class MyClass {}
window.hasOwnProperty('pi');      // => false
window.hasOwnProperty('message'); // => false
window.hasOwnProperty('MyClass'); // => false

 

标签:console,log,未定义,undefined,JS,window,变量,定义
From: https://www.cnblogs.com/redFeather/p/17662966.html

相关文章

  • js实现汉字中文排序
    js实现汉字中文排序的方法数组内的元素是对象,以对象某一个属性进行排序vararr=[{name:'南京',code:'09',info:{province:'江苏'}},{name:'北京',code:'01',info:{province:'北京'}},{name:'上海',code:'02&......
  • js_通过js主动触发原生事件, 以及通过js注册自定义事件并手动触发
    现实情景:在对博客园的样式进行修改时,需要对博客园的中某些DOM的绑定事件进行手动触发主动触发原生事件,以click为例constoBtn2=document.querySelector('#btn2')oBtn2.addEventListener('click',()=>{console.log('click')})constevObj=document.createEv......
  • JavaNote-变量与运算符
    1.关键字(keyword)定义:被Java语言赋予了特殊含义,用做专门用途的字符串(或单词)称为关键字。特点:全部关键字都是小写字母。官方地址:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html类型关键字用于定义数据类型的关键字class、interface、......
  • js前端excel导出带图片(亲测可用)
    1,js-table2excelnpm包有问题,导出后一片空白 2,改写一下js-table2excel/*eslint-disable*/letidTmr;constgetExplorer=()=>{letexplorer=window.navigator.userAgent;//ieif(explorer.indexOf("MSIE")>=0){return'ie';}......
  • js 常用链接
    nodeguide:TheNode.jsEventLoop,Timers,andprocess.nextTick()vuexvue3vitevitest......
  • 【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect
    问题描述在AppServiceForLinux中,部署NodeJS应用,应用启动失败。报错信息为:2023-08-29T11:21:36.329731566ZRangeError:Incorrectlocaleinformationprovided2023-08-29T11:21:36.329776866ZatIntl.getCanonicalLocales(<anonymous>)2023-08-29T11:21:36.329783066ZatC......
  • jsonpath用法记录
    {"flag":1,"code":0,"msg":"成功","detail":[{"name":"重疾险","value":"1","children":[......
  • pytest + yaml 框架 -54. variables 可以引用同一层级变量
    前言v1.4.5新增功能。同一层级variables变量中,可以引用前面的变量了config中variables可以引用同一层级变量用例中variables可以引用同一层级变量引用同一层级变量最近有部分学员遇到的问题,在同一个层级设置变量,后面的变量引用前面的变量(v1.4.4之前的版本不支持)con......
  • js事件移除
    1.AbortController()addEventListener()时,可以配置一个信号,用于命令式地中止/删除监听器。当相应的控制器调用.abort()时,监听器会被移除:const button = document.getElementById('button');const controller = new AbortController();const { signal } = contro......
  • 【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect
    问题描述在AppServiceForLinux中,部署NodeJS应用,应用启动失败。报错信息为:2023-08-29T11:21:36.329731566ZRangeError:Incorrectlocaleinformationprovided2023-08-29T11:21:36.329776866ZatIntl.getCanonicalLocales(<anonymous>)2023-08-29T11:21:36.3297830......