配置环境
参考(254条消息) 教你快速使用VSCode编写HTML文件_vscode html_半生瓜のblog的博客-CSDN博客
完成html在VScode上运行
JS功能
- 直接写入HTML输出流
- 对事件的反应
- 改变HTML内容
- 改变HTML图像
- 改变HTML样式
- 验证输入
JS实例
JavaScript 实例 | 菜鸟教程 (runoob.com)
对象实例JavaScript 对象实例 | 菜鸟教程 (runoob.com)
注意点
开发者工具的使用
F12 - 开发者工具详解 - 知乎 (zhihu.com)
显示数据的方式
JavaScript没有任何打印或者输出的函数
avaScript 可以通过不同的方式来输出数据:
- 使用 window.alert() 弹出警告框。
- 使用 document.write() 方法将内容写到 HTML 文档中。
- 使用 innerHTML 写入到 HTML 元素。
- ▲使用 console.log() 写入到浏览器的控制台。
注意:console不会打断你页面的操作,如果用alert弹出来内容,那么页面就死了,但是console输出内容后你页面还可以正常操作。
注意:innerHTML很多情况下都优于document.write,其原因在于其允许更精确的控制要刷新页面的那一个部分。
判断数据类型
在 JavaScript 中有 6 种不同的数据类型:
- string
- number
- boolean
- object
- function
- symbol
3 种对象类型:
- Object
- Date
- Array
2 个不包含任何值的数据类型:
- null
- undefined
用typeof()函数,但是typeof()函数不能区别array和object,使用Array.isArray()方法或者使用 instanceof 操作符
Object的null 和 undefined
JavaScript 对象是拥有属性和方法的数据
对象是容器/键值对的容器
注意:键的类型不一定是字符串,而是字符串或符号,一般类型都是转换成字符串(对象数字等类型),但是符号不会被强制转换。
在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。
对象只有被定义才有可能为 null,否则为 undefined。
如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误。
错误的使用方式:
1 | if (myObj !== null && typeof myObj !== "undefined") |
正确的方式是我们需要先使用 typeof 来检测对象是否已定义:
1 | if (typeof myObj !== "undefined" && myObj !== null) |
“helloworld”还是new String(“helloworld”)
不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用
BUT 原始值字符串,如 “John”, 没有属性和方法(因为他们不是对象),原始值可以使用 JavaScript 的属性和方法,因为 JavaScript 在执行方法和属性时可以把原始值当作对象
转为布尔类型
其他数据类型转换为布尔类型的规则: null、undefined、0、NaN、空字符串转换为false,其他转化为 true
switch判断
switch 中 case的判断是===的判断,即数据类型和值的双重判断,这点要注意。
for循环特点
中间如有某些下标未被使用(即未被赋值),在遍历的时候,采用一般的 for 循环和 for…in 循环得到的结果不同。
for…in 循环会自动跳过那些没被赋值的元素,而 for 循环则不会,它会显示出 undefined
for…of功能
循环一个生成器
循环一个拥有enumerate属性的对象(普通对象不行,按对象所拥有的属性进行循环,可使用内置的Object.keys()方法)
1
2
3for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}循环一个DOM collection(??)
循环字符串
循环类型化数组
循环Map
循环Set
4 种循环的适用场景:
- for : 比较适合遍历数组,字符串等等。
- for in : 比较适合遍历对象,遍历对象时使用这个再合适不过了。
- while : while 的话,与 for 的使用场景差不多。唯一不同的是,遍历的条件必须满足。
- do while : 至少执行一边的循环,遍历数组和字符串也是很方便。
标签与break、continue
break 的作用是跳出代码块, 所以 break 可以使用于循环和 switch 等
continue 的作用是进入下一个迭代, 所以 continue 只能用于循环的代码块。
代码块: 基本上是{}大括号之间
然后:
- 默认标签的情况(除了默认标签情况,其他时候必须要有名标签,否则会有惊喜)
当 break 和 continue 同时用于循环时,没有加标签,此时默认标签为当前”循环”的代码块。
当 break 用于 switch 时,默认标签为当前的 switch 代码块:
有名标签的情况
1 | cars=["BMW","Volvo","Saab","Ford"]; |
上述break list;会跳出list的代码块。如果将break换成continue会有惊喜,违反了明确中的第二点,因为list只是个普通代码块,而不是循环。除非list写成如下形式 list:
1 | for(var i=0; i<10; ++i) |
有了标签,可以使用break和continue在多层循环的时候控制外层循环。
例如下面:
1 | outerloop: |
constructor属性
可以使用 constructor 属性来查看对象是否为某某
1 | function isArray(myArray) { |
字符串转数字
字符串转日期:
1 | var str = "2019-12-25"; |
特殊值判断
NaN 这个特殊的数值也可以使用 Object.is() 方法来判断。
并且在这个方法中还可以判断 +0 和 -0。
1 | console.log(Object.is(NaN, NaN)); //true |
正则式
JavaScript RegExp 对象 | 菜鸟教程 (runoob.com)
正则表达式表单验证实例:
1 | /*是否带有小数*/ |
正则捕获,转换时间格式:
1 | const str = '20210426141823'; |
1 | /** |
HTML5 表单属性
HTML5 表单属性 | 菜鸟教程 (runoob.com)
多表单使用同一验证函数问题
上面用 js 表单验证判断表单字段(fname)值是否存在,如果想多个表单都使用同一个函数调用,传入参数后功能会失效,希望有大佬能解决这个问题。
现在我在网上找到的替代方法如下:
1 | function validateForm(form) { |
所有表单调用时都使用:
1 | onsubmit="return validateForm(this)" |
经验证好使。
事件属性为什么有return func()
onsubmit=”return validateForm()” 为什么不是 onsubmit=”validateForm()” ??
onsubmit=”validateForm()” 能够调用 validateForm() 对表单进行验证,但是在验证不通过的情况下,并不能阻止表单提交。
onsubmit=”return validateForm()” 当验证不通过时,返回 false,可以阻止表单提交。
为何?
原来 onsubmit 属性就像是