写在下篇文章。
练习时,可以使用开发者工具 JavaScript 控制台,即chrome浏览器中按f12,点击console,换行是shift+enter。ctrl+l:清屏
通过 focus() 方法让光标在页面加载完毕时自动放置于 输入框内,这意味着玩家可以马上开始第一次猜测,而无需点击输入框。 这只是一个小的改进,却提高了可用性——为使用户能投入游戏提供一个良好的视觉线索。
property(属性)
忘了写字符串开始的引号:
SyntaxError: expected expression, got ‘string’(得到一个 ‘string’ 而非表达式)
忘了写字符串结束的引号:
SyntaxError: unterminated string literal(字符串字面量未正常结束)
unterminated(未结束)literal(字面意义的)
querySelector(查询选择器)
<button>Press me</button>
<script>
const button = document.querySelector('button');
button.onclick = function() {
let name = prompt('What is your name?');
alert('Hello ' + name + ', nice to see you!');
</script>
}
var兼容性好
let更靠谱
与其他编程语言不同,在 JavaScript 中你不需要声明一个变量的类型。
let myAge = 17;//number类型
let dolphinGoodbye = 'So long and thanks for all the fish';//string类型
let iAmAlive = true;//boolean(布尔)类型
let myNameArray = ['Chris', 'Bob', 'Jim'];
let myNumberArray = [10,15,40];//array(数组)类型
当数组被定义后,您可以使用如下所示的语法来访问各自的值,例如下行:
myNameArray[0]; // should return 'Chris'
myNumberArray[2]; // should return 40
let dog = { name : 'Spot', breed : 'Dalmatian' };//object(对象)类型
要检索存储在对象中的信息,可以使用以下语法:
dog.name
JavaScript是一种“动态类型语言”,这意味着不同于其他一些语言(译者注:如C、JAVA),您不需要指定变量将包含什么数据类型(例如number或string)
例如,如果你声明一个变量并给它一个带引号的值,浏览器就会知道它是一个字符串.
名为typeof的特殊的操作符 ——它会返回所传递给它的变量的数据类型:
let myNumber = '500';
typeof myNumber;// 返回string
% 求余(取模)
** 幂
let num1 = 4;
num1++;//返回4(这是因为浏览器先返回当前值,然后增加变量。 )
num1//返回5
num2--//同理
//若使用++num1 和 --num2就是先自增/减再返回值。
===严格等于
!==严格不等于
//也有==和!=的版本,这种的话类型不同也算相同,容易出错。
let bigmouth = 'I\'ve got no right to take my place...';
bigmouth;
<button>Press me</button>
const button = document.querySelector('button');
button.onclick = function() {
let name = prompt('What is your name?');
alert('Hello ' + name + ', nice to see you!');
}
let browserType = ‘mozilla’;
let radData = ‘My NaMe Is MuD’;
var input2 = cities[i].toLowerCase();
var first = input2.slice(0,1);
var first2 = first.toUpperCase();
var input3 = input2.replace(first,first2);
var result = input3;
var input = stations[i];
var station = stations[i].slice(0,3);
var find = stations[i].indexOf(";");
var name = stations[i].slice(find + 1)
var input2 = station + ": " + name
var result = input2;
(从零开始计数)
console.log(变量) //可以把变量打印至控制台
let myData = 'Manchester,London,Liverpool,Birmingham,Leeds,Carlisle';
let myArray = myData.split(',');
myArray;
let myNewString = myArray.join(',');
myNewString;
另一种方法:(tostring方法)(这个方法不能指定分隔符)
let dogNames = ["Rocket","Flash","Bella","Slugger"];
dogNames.toString(); //Rocket,Flash,Bella,Slugger
关键代码:
var subArray = products[i].split(":");
var name = subArray[0];
var price = Number(subArray[1]);
total += price;
itemText = name + " --$ " + price;
注意拼写啊!拼写错了会出错并且没结果的。
我把split中的li拼写错了。
.pop(删除数组末尾)
.push(在数组末尾添加)
.shift(删除数组开头)
.unshift(在数组开头添加)
explicitly specify(显式指定)(明确地详述)
以下写法是错误的:
if (x === 5 || 7 || 10 || 20) {
// run my code
}
这个写法的意思是:7或10或20或x === 5(为了避免歧义,我把7卸载了前面)
由于任何不是 false, undefined, null, 0, NaN 的值,或一个空字符串(’’)在作为条件语句进行测试时实际返回true,以上语句永远返回true。
condition ? exprIfTrue : exprIfFalse
例:
1
var greeting = ( isBirthday ) ? 'Happy birthday Mrs. Smith — we hope you have a great day!' : 'Good morning Mrs. Smith.';
2
( select.value === 'black' ) ? update('black','white') : update('white','black');
略
匿名函数与事件处理程序一起使用:
var myButton = document.querySelector('button');
myButton.onclick = function() {
alert('hello');
}
将匿名函数分配为变量的值:
var myGreeting = function() {
alert('hello');
}
于是现在可以使用以下方式调用此函数:
myGreeting();
还可以将该函数分配为多个变量的值:
var anotherGreeting = function() {
alert('hello');
}
现在可以使用以下任一方法调用此函数:
myGreeting();
anotherGreeting();
但这只会令人费解,所以不要这样做!创建方法时,最好坚持下列形式:
function myGreeting() {
alert('hello');
}
略
一个冲突的例子:
<!-- Excerpt from my HTML -->
<script src="first.js"></script>
<script src="second.js"></script>
<script>
greeting();
</script>
// first.js
var name = 'Chris';
function greeting() {
alert('Hello ' + name + ': welcome to our company.');
}
// second.js
var name = 'Zaptec';
function greeting() {
alert('Our company is called ' + name + '.');
}
alert(警示的)
parameter(参数)
validate(认证)
两种方法:
1
const btn = document.querySelector('button');
btn.onclick = function() {
const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
document.body.style.backgroundColor = rndCol;
}
2
const btn = document.querySelector('button');
function bgChange() {
const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
document.body.style.backgroundColor = rndCol;
}
btn.onclick = bgChange;
复习:第二种方法最后一行的函数后没括号哦!括号是函数调用运算符。
btn.onfocus 置于焦点时
btn.onblur 解除焦点时
btn.ondblclick 颜色将仅于按钮被双击时改变
window.onkeypress 按下并松开
window.onkeydown 按下
window.onkeyup 松开
以上三个事件如果你将事件处理器添加到按钮本身,它将不会工作 — 我们只能将它添加到代表整个浏览器窗口的 window对象中。
btn.onmouseover 鼠标移入
btn.onmouseover 鼠标移出
略
可以给同一个监听器注册多个处理器(指函数AB):
myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
然而,不用这个函数就不行:(第二行会覆盖第一行)
myElement.onclick = functionA;
myElement.onclick = functionB;
HTML事件处理,这个out啦。因为不好用啊!
事件处理器属性的选项会更少,于是兼容性更好。
那两个函数更强大。
我累了,歇会儿啊。
歇够了
通常使用e / evt / event命名
.target属性始终是事件刚刚发生的元素的引用
function bgChange(e) {
const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
e.target.style.backgroundColor = rndCol;
console.log(e);
}
btn.addEventListener('click', bgChange);
还有一些别的属性,用到的时候再说。
preventDefault()
冒泡阶段:
元素。捕获阶段反过来,从开始。
上,这样事件就会从列表项冒泡到其父元素
上。