js是专为网页交互而设计的脚本语言,由3部分组成:
js是一种脚本语言、解释性语言、动态类型语言、基于对象的语言
defer、async作用和区别分析
8. 文档模式:混杂模式和标准模式(影响css内容的呈现)
doctype
若在文档开始处没有声明文档类型,则所有的浏览器都会默认开启混杂模式,但这样并不值得推荐,因为不同浏览器在这种模式下的行为差异非常大,如果不使用某些hack技术,跨浏览器的行为没有一致性可言。
标准模式声明:HTML5
“use strict“
window.onload
var message = "hi",
found = false,
age =29;
var floatNum = 3.15e7; //等于31500000
var num1 = 070; // 八进制的56
var num2 = 079; // 无效的八进制数值-解析为79
var num3 = 0xA; // 十六进制的10
var floatNum1 = .1 // 有效,但不推荐
var floatNum2 = 1.; //小数点后面没有数字 - 解析为1
var floatNum3 = 10.0; // 整数,解析为10
isNaN(NaN); // true
isNaN(10); // false
isNaN("10"); // false (可以被转换成数值)
isNaN("blue"); // true
isNaN(true); // false(可以被转换成数值)
Number(" ") // 0
Number("000011") // 11
parseInt("1234blue") // 1234
parseInt(" ") // NaN
parseInt("0xA") // 10 (十六进制数)
parseInt(22.5) // 22
parseInt("070") // 56 (八进制数)
parseInt("70") // 70 (十进制数)
parseInt("0xf") // 15 (十六进制数)
parseInt(“10”,2) // 2(二进制数)
parseInt(“10”,8) // 8(八进制数)
parseInt(“10”,10) // 10(十进制数)
parseInt(“10”,16) // 16(十六进制数)
parseFloat("1234blue") // 1234
parseFloat("0xA") // 0
parseFloat("22.5") // 22.5
parseFloat("22.34.5") // 22.34
parseFloat("0908.5") // 908.5
parseFloat("3.125e7") // 31250000
函数提升优先级高于变量提升
result = variable instanceof constructor
value instanceof Array
可能不适用;for(var i = 0; i < 10; i++) {}
变量i即使退出了循环,也依然存在于循环外部的执行环境中;element.someObject = null
arguments
对象;作用域链的下一个变量对象来自外部环境,最后一个对象是全局执行环境的变量对象。with
try catch
语句,都会在作用域链的前端添加一个变量对象。P75执行环境及作用域
var color = 'blue'
function changeColor() {
var anotherColor = 'red'
function swapColors() {
var tempColor = anotherColor
anotherColor = color
color = tempColor
// 最内层函数可以访问全局的color,外层函数的局部变量anoteColor 和自己的局部变量tempColor
}
swapColors()
// 全局函数可以访问全局的color和自己的局部变量anotherColor,但不能访问内部函数的tempColor
}
changeColor()
闭包:有权访问另一个函数作用域中的变量的函数
key
function createFunction(key) {
return function(obj1, obj2) {
var v1 = obj1[key]
var v2 = obj2[key]
if (v1 < v2) {
return -1
} else if (v1 > v2) {
return 1
} else {
return 0
}
}
}
person["first name"]
var obj = Object() <=> var obj = new Object()
var arr = Array() <=> var arr = Array()
var arr = [1,2,] // 可能会创建包含2项或3项的数组
var arr= [,,,,,] // 可能会创建包含5项或6项的数组
var arr = [1,2,3]
arr.length = 4 // arr会新增一项,undefined
Array.isArray(value)
(instanceof可能不适用)toString()
:返回逗号拼接每个值的字符串形式(最终结果是一个字符串);toLocaleString()
: 对数组每一项调用这个方法;alert(数组) // 由于alert()要接收字符串参数,所以会在后台调用toString()
join()
方法只接受一个参数,作为分隔符;若无参数或参数是undefined,则以逗号作为分隔符;arguments.callee.caller
apply()和call()
能设置函数体内的this值;bind()
创建一个函数的实例,this会被绑定到传给它的参数上;var num = "25"
var num1 = Number(num)
console.log(typeof num1) // number
var num2 = new Number(num)
console.log(typeof num2) // object
var obj= new Object('str')
console.log(obj instanceof Object) // true
console.log(obj instanceof String) // true
var obj = new Boolean(false)
var result = obj && (true)
console.log(result) // true
var num = 10.005
console.log(num.toFixed(2)) // 10.01 自动舍入
concat()/slice()
方法;Global和Math
valueOf()
,结果还是数组;valueOf()
,结果是日期的毫秒;valueOf()
,返回正则表达式本身;valueOf()
,返回基本类型false或true;valueOf()
返回数值;toString()
:返回逗号拼接每个值的字符串形式(最终结果是一个字符串);toLocaleString()
: 对数组每一项调用这个方法;toString() / toLocaleString()
返回正则表达式的字面量;toString() / toLocaleString()
返回函数代码;toString()
,返回字符串’false’ 或 ‘true’;toString()
,返回数值几进制的字符串形式;Object.prototype.toString.call({}) // '[object Object]'
Object.prototype.toString.call([]) // '[object Array]'
Object.prototype.toString.call(() => {}) // '[object Function]'
Object.prototype.toString.call('seymoe') // '[object String]'
Object.prototype.toString.call(1) // '[object Number]'
Object.prototype.toString.call(true) // '[object Boolean]'
Object.prototype.toString.call(Symbol()) // '[object Symbol]'
Object.prototype.toString.call(null) // '[object Null]'
Object.prototype.toString.call(undefined) // '[object Undefined]'
// 对于内置对象 or 构造函数
Object.prototype.toString.call(new Date()) // '[object Date]'
Object.prototype.toString.call(Math) // '[object Math]'
Object.prototype.toString.call(new Set()) // '[object Set]'
Object.prototype.toString.call(new WeakSet()) // '[object WeakSet]'
Object.prototype.toString.call(new Map()) // '[object Map]'
Object.prototype.toString.call(new WeakMap()) // '[object WeakMap]'