`
charlesEye
  • 浏览: 6886 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript window.name是什么?

 
阅读更多

今天在写js 全局变量作用域的时候,碰到了一个纳闷的问题

首先根据定义:全局变量有两种方式创建:

1 方法外部声明的变量,2 方法内部没有使用var关键字声明的变量

  第一次代码

 

function Person(str){
  this.name=str;
}
			
var p1=new Person('z3');
console.log(p1.name);  //结果 z3  
console.log(name);  //结果 z3

 

 

一开始对于这两个结果,我认为是理所当然的;

第一个结果 p1.name 返回z3。首先函数内的this代表着指向当前调用者。通过Person对象创建了一个p1实例。再调用p1.name,此时的this指向就是这个对象实例。

第二个结果 name 返回 z3。 当时没有深究,认为this.name执行完之后创建的是一个全局变量(这里一下错了两个地方,后续说明)。

所以当时得出的总结是 1, this总是指向当前调用者,2,使用this.field可以创建全局变量。

 

在上面的代码再添加行代码

第二次代码

function Person(str){
  this.name=str;
  this.age=25;
}
			
var p1=new Person('z3');
console.log(p1.name);  //结果 z3  
console.log(name);  //结果 z3

console.log(p1.age); //结果25
console.log(age);  // age is not defined

   对这个结果一开始很不可思议,怎么name没问题,age 就变成了没有定义。

   想了一会想不通之后, 打开firebug, 运行之后查看window这个对象有没有age这个变量(如果有就是全局变量)。一看果然没有



 

 只有一个Person对象及这个对象的实例 p1。 那这个name是怎么回事? 继续看了下window相关的属性,居然看到了这么个东东

 居然还有window.name这个属性,而且值默认是空字符""; 也就是说下面这样的代码完全可以执行,没有undefined, 也没有 xx is not defined

<script type=text/javascript>

     alert(name);

</script>

 

把上面代码再做一个修改

第三次代码

function Person(str){
  this.name=str;
  age=25;
}
			
var p1=new Person('z3');
console.log(p1.name);  //结果 z3  
console.log(name);  //结果 z3

console.log(p1.age); //结果  undefined
console.log(age);  // 25

   

   这一下就了然了,首先this只是代表指向当前调用者,this.field 不会创建全局变量。

 

   第二个打印结果是正确的 是因为 name这个全局变量不是通过this.name创建的 而是window自带了一个name这个属性,并且默认值为""。通过this.name赋值,只是把window.name的默认值覆盖了。

  

  第三个打印结果为undefined 原因很简单,age=25  是全局变量要调用只能是window.age或age。通过p1.age,只能是声明了一个变量但是未赋值,所以打印出来就是undefined



 

 目前只是知道window对象中有name这个属性,而且它的作用很广,其中有个重要的作用是可以解决js中同源策略的问题。

 

 

  • 大小: 12.9 KB
  • 大小: 11.5 KB
  • 大小: 6.8 KB
分享到:
评论

相关推荐

    跨域问题 之 window.name

    总之,`window.name`跨域技术是JavaScript中一种较老但仍然有效的跨域数据传递方法,适用于对安全性要求不高且不涉及敏感数据的场景。随着现代浏览器的不断发展,更安全和高效的跨域解决方案如CORS已经成为了主流,...

    字符串 window.open() window.opener window.name window对象等的总结

    在JavaScript的世界里,`window`对象是全局对象,它提供了与浏览器窗口进行交互的各种方法和属性。本篇文章将深入探讨`window.open()`、`window.opener`、`window.name`以及`window`对象的一些核心概念,同时通过两...

    javascript 打开页面window.location和window.open的区别.docx

    ### JavaScript打开页面window.location与window.open的区别 #### 一、概述 在JavaScript中,`window.location` 和 `window.open` 都是用来控制浏览器导航的重要API,但它们在使用场景、功能特性和行为上有显著的...

    window.showModalDialog模式对话框和 window.open的区别

    `window.showModalDialog` 和 `window.open` 都是JavaScript提供的两种打开新窗口的方法,但它们在功能和使用场景上有着显著的区别。 首先,我们来详细探讨`window.showModalDialog`。`showModalDialog`方法用于...

    JavaScript_window.setTimeout()_的详细用法

    ### JavaScript中的`window.setTimeout()`详解 #### 一、概述 在JavaScript编程中,`window.setTimeout()`函数是一个非常重要的异步编程工具,它允许开发者在指定的时间后执行特定的代码片段。这一特性对于实现...

    window.open最大化问题

    Window.open 是 JavaScript 中的一个方法,用于打开新的浏览器窗口。然而,在实际应用中,我们经常需要将弹出的窗口最大化,以便更好地展示内容。在本文中,我们将探讨如何使用 Window.open 方法来实现窗口的最大化...

    js弹窗并返回值(window.open方式)

    在JavaScript中,`window.open`方法是一个非常实用的功能,它允许开发者创建新的浏览器窗口或标签页,并在其中加载指定的网页内容。这个方法在交互式用户界面设计中尤其常见,例如用于显示警告、确认对话框或者...

    Window.Open详解

    - `window.open()` 方法支持 JavaScript 1.0+/JScript 1.0+/Nav 2+/IE 3+/Opera 3+ 等浏览器。 - 在现代浏览器中,此方法通常都能正常工作,但在一些较旧或非主流浏览器中可能会出现问题。 #### 六、总结 `...

    window.showModalDialog以及window.open用法简介

    `window.showModalDialog`和`window.open`是JavaScript中用于实现这一目标的两个关键函数。它们都可以创建新窗口,但有着不同的特性和使用场景。 首先,`window.open()`是一个广泛使用的函数,它可以在浏览器中打开...

    javascript弹出窗口 window.open使用方法以及参数说明分析篇

    window.open使用方法以及参数说明一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口...

    window.open打开新窗口参数设置

    在前端开发中,`window.open()` 方法是浏览器内置的一个功能,用于在JavaScript中打开新的浏览器窗口。本文将深入探讨如何使用 `window.open()` 方法及其参数设置,帮助开发者更好地掌握此方法的用法。 #### 一、`...

    javascript跨域总结之window.name实现的跨域数据传输

    window.name属性是浏览器窗口或者iframe的window对象的一个属性,它有一个很特别的特点:无论页面内容如何变化,或者页面如何导航跳转,只要window对象不被销毁,window.name的值都不会丢失。这个特性被利用来实现...

    javascript使用window.name解决跨域问题第1/2页

    JavaScript中的`window.name`属性是一个独特且强大的工具,尤其在处理跨域通信时。它不受同源策略的限制,可以在不同页面甚至不同域名之间保持其值。这是因为`window.name`的值在页面重载或导航至其他URL时仍然保留...

    window.open父子窗口传值问题

    在Web开发中,`window.open` 是一个JavaScript函数,它用于打开新的浏览器窗口或标签页。这个函数在处理用户交互,比如点击按钮打开新页面,或者在不同窗口间传递数据时非常常见。当我们谈论“window.open父子窗口...

    js window.open iframe dialog

    在JavaScript的世界里,`window.open`、`iframe`和`dialog`是三个非常重要的概念,它们在网页交互和页面通信中扮演着关键角色。这里我们将深入探讨这些知识点,并结合实例来帮助你理解它们的用法。 1. `window.open...

    window.open 控制

    在JavaScript中,`window.open()` 是一个非常有用的函数,它用于在浏览器中打开新的窗口或者标签页。在本文中,我们将深入探讨如何使用`window.open()`来创建并控制弹出窗口,尤其是如何实现窗口的最大化和获取焦点...

    详解js location.href和window.open的几种用法和区别.docx

    它的语法是 window.open(url, name, specs, replace),其中 url 是要打开的 URL,name 是窗口的名称,specs 是窗口的参数,replace 是是否替换当前页面。 五、window.open() 和 location.href 的区别 window.open...

Global site tag (gtag.js) - Google Analytics