正在加载...

window 对象

店里有一只铃。它是段落 #bell,一开始是 blank。这一页没有表单。
window 是这个标签页的对象。文档、视口宽度,以及普通脚本里的 var,都挂在它上面。let 不挂。页面读四样东西再拼起来。这一行是 same / 4 / undefined / number。

不是那张茶单

上一页拒绝空的客人和 1 到 3 以外的杯数。那一行是 need guest / ok。这一页不看 #guest,也不看字段 #cups。这里的 cups 是一个 var,不是输入框。
问题换了:通过 window 能碰到什么?

文档只有一个

document 不是第二份。它就是 window.document。从 window.document 找到的铃,和从 document 找到的是同一只。

同一个文档

javascript
let bell = window.document.getElementById("bell");
let also = document.getElementById("bell");
bell.textContent = window.document === document ? "same" : "no";
console.log(bell.textContent);
console.log(bell === also);

日志先是 same,然后是 true。一个文档,一只铃。

var 挂在窗口上

这个脚本里 var cups = 4 会做出 window.cups。读出来是数字 4。String 只是为了写到铃上,把它变成文本。

通过 window 读 var

javascript
var cups = 4;
let bell = document.getElementById("bell");
bell.textContent = String(window.cups);
console.log(bell.textContent);

日志是 4。这个 4 是变量,不是表单字段。

let 留在外面

let kettle = 1 是存在的。它不是 window 的属性。window.kettle 是 undefined,String 把它变成单词 undefined。

let 不在 window 上

javascript
let kettle = 1;
let bell = document.getElementById("bell");
bell.textContent = String(window.kettle);
console.log(bell.textContent);
console.log(kettle);

日志是 undefined,然后是 1。水壶在。它只是不挂在 window 上。

宽度是数字

window.innerWidth 是视口横向上有多少 CSS 像素。这个值的 typeof 是 "number"。它不是文本,输入框的 value 才是文本。

宽度是数字

javascript
let bell = document.getElementById("bell");
bell.textContent = typeof window.innerWidth;
console.log(bell.textContent);

日志是 number。像素数会随窗口变。类型不变。

别去写地址

window.location.href 是这个标签页的地址,它是字符串。读它没有事。写进一个新地址,页面就离开了。没有一段代码往 href 里写。

四次读取,不是表单

这里不修剪名字,也不检查范围。四次读取是:文档是不是同一个对象、那个 var、缺席的 let、宽度的类型。String(undefined) 是单词 undefined,不是一只空铃。

铃下面的那一行

脚本在 body 末尾。它声明 var cups = 4 和 let kettle = 1,然后放进四次读取:文档是否相同、window.cups、window.kettle、typeof window.innerWidth。

页面演示 — 店铃

html
<!DOCTYPE html>
<html>
<head>
<title>shop-bell — page</title>
</head>
<body>
<p id="bell">blank</p>
<p id="line">…</p>
<script>
var cups = 4;
let kettle = 1;
let seen = [];
seen.push(window.document === document ? "same" : "no");
seen.push(String(window.cups));
seen.push(String(window.kettle));
seen.push(typeof window.innerWidth);
document.getElementById("line").textContent = seen.join(" / ");
</script>
</body>
</html>

这一行是 same / 4 / undefined / number。文档对上了。var 在 window 上看得到。let 看不到。宽度的类型是 number。blank 没了。need guest / ok 是上一页。

在柜台

  1. 把 window.document 和 document 比一比。铃显示 same。
  2. 声明 var cups = 4,读 window.cups。铃显示 4。
  3. 声明 let kettle = 1,读 window.kettle。铃显示 undefined。kettle 本身仍是 1。
  4. 读 typeof window.innerWidth。铃显示 number。
  5. 读页面那一行:same / 4 / undefined / number。

柜台上看错的地方

铃显示的是这些词里的一个,不是客人的名字。

  • 以为 window.kettle 是 1
  • 以为 window.cups 是 undefined
  • 把 innerWidth 当成文本
  • 往 location.href 里写,于是离开页面
  • 把这一行读成 need guest / ok

记住这些

  • window.document 和 document 是同一个对象
  • var cups = 4 可以当成 window.cups 来读
  • let kettle = 1 不会造出 window.kettle
  • typeof window.innerWidth 是 number
  • 页面这一行是 same / 4 / undefined / number

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部