小编教你浏览器提示页面不存在并在地址栏尾端显示undefined怎么解决

浏览器提示页面不存在并在地址栏尾端显示undefined是一种什么现象?undefined并没有在页面中直接显示 , 而是显示在地址栏中导致页面丢失故障 。如果该网页是用户的网站该怎么优化JavaScript呢?

小编教你浏览器提示页面不存在并在地址栏尾端显示undefined怎么解决


浏览器提示页面不存在并在地址栏尾端显示undefined的解决方法:
undefined是一个特殊值 , 通常用于指示变量尚未赋值 。对未定义值的引用返回特殊值 。其实大多数计算机语言 , 只有一个表示“无”的值 , 比如 , C语言的NULL , Java语言的null , Python语言的None , Ruby语言的nil 。
但有一种语言是例外的 , JavaScript语言居然有两个表示“无”的值:undefined和null 。这是为什么?undefined 和null有什么区别呢?
一、相似性
在JavaScript中 , 将一个变量赋值为undefined或null , 实话说 , 二者几乎没区别 。
01var a = undefined;02var a = null;复制代码var a = undefined;var a = null;
上面代码中 , a变量分别被赋值为undefined和null , 这两种写法效果几乎是一样的 。
undefined和null在if语句中 , 都会被自动转为false , 相等运算符甚至直接报告两者相等 。
01if (!undefined)02console.log('undefined is false');03// undefined is false04if (!null)05console.log('null is false');06// null is false07undefined == null08// true复制代码if (!undefined)console.log('undefined is false');// undefined is falseif (!null)console.log('null is false');// null is falseundefined == null// true
上面代码说明 , 两者的行为是何等相似!
既然undefined和null的含义与用法都差不多 , 为什么要同时设置两个这样的值?
二、真相揭秘
原来 , 这与JavaScript的历史有关 。1995年JavaScript诞生时 , 最初像Java一样 , 只设置了null作为表示“无”的值 。但是 , JavaScript的设计者Brendan Eich , 觉得这样做还不够 , 有两个原因 。
【小编教你浏览器提示页面不存在并在地址栏尾端显示undefined怎么解决】首先 , null像在Java里一样 , 被当成一个对象 。但是 , JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类 , Brendan Eich觉得表示“无”的值最好不是对象 。
其次 , JavaScript的最初版本没有包括错误处理机制 , 发生数据类型不匹配时 , 往往是自动转换类型或者默默地失败 。Brendan Eich觉得 , 如果null自动转为0 , 很不容易发现错误 。
因此 , Brendan Eich又设计了一个undefined 。
三、目前的用法
但是 , 上面这样的区分 , 在实践中很快就被证明不可行 。目前 , null和undefined基本是同义的 , 只有一些细微的差别 。
null表示“没有对象” , 即该处不应该有值 。典型用法是:
(1) 作为函数的参数 , 表示该函数的参数不是对象 。
(2) 作为对象原型链的终点 。
01Object.getPrototypeOf(Object.prototype)02// null复制代码Object.getPrototypeOf(Object.prototype)// null
undefined表示“缺少值” , 就是此处应该有一个值 , 但是还没有定义 。典型用法是:
(1)变量被声明了 , 但没有赋值时 , 就等于undefined 。
(2) 调用函数时 , 应该提供的参数没有提供 , 该参数等于undefined 。
(3)对象没有赋值的属性 , 该属性的值为undefined 。
(4)函数没有返回值时 , 默认返回undefined 。
01var i;02i // undefined03function f(x){console.log(x)}04f() // undefined05varo = new Object();06o.p // undefined07var x = f();08x // undefined复制代码var i;i // undefinedfunction f(x){console.log(x)}f() // undefinedvaro = new Object();o.p // undefinedvar x = f();x // undefined

推荐阅读