JavaScript基础知识整合复习总结

JavaScript基础知识整合复习总结



11.在 JavaScript 中,有多少种不同类型的循环?
您的回答:四种。for 循环、while 循环、do...while 循环以及 loop...until 循环。

正确答案:两种。for 循环和 while 循环。

19.如何在浏览器的状态栏放入一条消息?
您的回答:window.status("put your message here")

正确答案:window.status = "put your message here"

20.如何获得客户端浏览器的名称?
您的回答:browser.name

正确答案:navigator.appName

day01



JavaScript 由 Brendan Eich 于 1995 年发明,并于 1997 年成为 ECMA 标准。ECMAScript 是该语言的官方名称。从 2015 年起,ECMAScript 按年命名(ECMAScript 2015)
ECMAScript 5 也称为 ES5 和 ECMAScript 2009。  ECMAScript 6 也称为 ES6 和 ECMAScript 2015。    Safari 10 和 Edge 14 是首先完全支持 ES6 的浏览器。
IE 4 是第一个支持 ECMAScript 11997)的浏览器。IE 5 是第一个支持 ECMAScript 21999)的浏览器。IE 5.5 是第一个支持 ECMAScript 32000)的浏览器。IE 9 * 是第一个支持 ECMAScript 52011)的浏览器。Chrome 23IE 10 和Safari 6 是第一批完全支持 ECMAScript 5 的浏览器。
cascading style sheets =CSS层叠样式表     普通文本(比如段落)的默认大小是 16 像素 (16px=1em)。
JavaScript当中,使用到的CSS属性,区分大小写,并且省略'-'符号,使用驼峰命名法(如果只有一个单词就首字母纯小写就行了),否则无效。例如:fontWeight===font-weight.
JavaScript当中,编辑器里用回车键产生的空格引起的换行使得该部分js代码原样输出无效,而用空格键产生的则能正常发挥作用。
JavaScript 对大小写敏感------所有 JavaScript 标识符对大小写敏感。    JavaScript 从左向右进行编译。
如果再次声明某个 JavaScript 变量,将不会丢它的值。位运算符处理 32 位数。js当中的/除法,不是java当中的整除而是正常的除法。
** :求幂。yield :暂停函数。<<	零填充左位移;>>	有符号右位移;>>>	零填充右位移(无符号右位移)。
当数值和字符串相加时,JavaScript 将把数值视作字符串。var x;(undefined)没有值的变量,其值是 undefined。数据类型也是undefined。  如果之前定义过且赋值过变量,就会保留该值,即使重复 var x;。
JavaScript 只有一种数值类型。e:科学计数法 表示:×10的后边那个数的次方。e前边必须有数值,整数或小数或0均可,否则无输出。
【0---max-1】数组越界引用输出时(如:-1,13。。。),显示undefined。数组名引用输出时,则输出所有元素(项目),并用逗号隔开。
数据类型:string  number  boolean  object(数组、对象、null属于object)  undefined。关键字()不属于数据类型,所以 typeof typeof ;无输出。
typeof 运算符对函数返回function,对数组返回 "object",因为在 JavaScript 中数组属于对象。任何变量均可通过设置值为 undefined 进行清空。其类型也将是 undefined。
在 JavaScript 中,null 的数据类型是对象。可以通过设置值为 null 清空对象,值是 null,但是类型仍然是对象。您也可以通过设置值为 undefined 清空对象。undefined 与 null 的值相等,但类型不相等。
当 JavaScript 到达 return 语句,函数将停止执行。toCelsius 引用的是函数对象,而 toCelsius() 引用的是函数结果。不使用 () 访问函数将返回函数声明而不是函数结果。
对象的方法以函数定义被存储在属性中。在函数定义中,this 引用该函数的“拥有者”。对象定义时,各个属性以逗号分隔,最后一个可加可不加逗号,但一定不能是分号。
访问对象属性:objectName["propertyName"] / objectName.propertyName 。(使用 this.innerHTML)改变了其自身元素的内容。字符串内建属性 length 可返回字符串的长度。\\--- \ 反斜杠
为了最佳可读性, 程序员们通常会避免每行代码超过 80 个字符串。如果某条 JavaScript 语句不适合一整行,那么最佳换行位置是某个运算符之后。您也可以在字符串中换行,通过一个反斜杠即可。
您不能通过反斜杠对代码行进行换行。但是字符串也可通过关键词 new 定义为对象,它会拖慢执行速度。
var x = new String("Bill");             var y = new String("Bill");             //(x == y) 与(x === y)均为 false,因为 x 和 y 是不同的对象,对象无法比较。
但是通过 JavaScript,方法和属性也可用于原始值,因为在执行方法和属性时 JavaScript 将原始值视为对象。
正则表达式不带引号。所有字符串方法都会返回新字符串。它们不会修改原始字符串。正式地说:字符串是不可变的:字符串不能更改,只能替换。
0 是字符串中的第一个位置;indexOf() 方法返回字符串中指定文本首次出现的索引(位置);lastIndexOf() 方法返回指定文本在字符串中最后一次出现的索引;如果未找到文本, indexOf()lastIndexOf() 均返回 -1。
两种方法都接受作为检索起始位置的第二个参数。str.indexOf("子串", beginPosition);lastIndexOf() 方法向后进行检索(从尾到头)。search() 方法无法设置第二个开始位置参数。 ==  indexOf() 方法无法设置更强大的搜索值(正则表达式)。
slice(start, end) 含头不含尾,左小右大//该方法设置两个参数:起始索引(开始位置),终止索引(结束位置)。可以为负值,倒着数,-1开始(倒数第一为-1)。左负右正可以(正负交错),但是保证中间要有字符数据,否则输出为空。
如果省略第二个参数,则该方法将裁剪字符串的剩余部分。//(相对于字符串)去头留尾,舍左留右,正负均可,var temp=str.slice(2);包含第三个(2)字符。
substring(start, end) == slice(start, end),substring() == slice();如果省略第二个参数,则该方法将裁剪字符串的剩余部分,但,唯独substring(),自己不能使用负的索引。
substr(start, length) 第二个参数规定被提取部分的长度。substr() === slice() 如果省略第二个参数,则该方法将裁剪字符串的剩余部分。
replace() 方法用另一个值替换在字符串中指定的值:replace() 只替换首个匹配,对大小写敏感;replace() 方法不会改变调用它的字符串。它返回的是新字符串。//var n = str.replace("Microsoft", "W3School");
通过 toUpperCase() 把字符串转换为大写;通过 toLowerCase() 把字符串转换为小写。concat(,,,) 方法连接两个或多个字符串,中间参数列表至少有一个,可以为字符串变量名,也可以是双引号引起的字符串常量。
trim() 方法删除字符串两端的空白符。提取字符串字符:charAt(position) :返回字符串中指定下标(位置)的字符串;charCodeAt(position) :返回字符串中指定索引的字符 unicode 编码。‘ ’:32,‘0’:48var str = "HELLO WORLD";      str[0];         // 返回 H     字符串的属性访问:它让字符串看起来像是数组(其实并不是);如果找不到字符,[ ] 返回 undefined,而 charAt() 返回空字符串('')。它是只读的。str[0] = "A" 不会产生错误(但也不会工作!)
split("?");如果省略分隔符,被返回的数组将包含 index [0] 中的整个字符串。?为任意字符或字符串,被返回的数组不含该分隔符。
如果分隔符是 "",被返回的数组将是间隔单个字符的数组。
JavaScript 数值始终是 64 位的浮点数,JavaScript 数值始终以双精度浮点数来存储,根据国际 IEEE 754 标准。此格式用 64 位存储数值,其中52051 存储数字(片段),115262 存储指数,1位第63 位存储符号。
整数(不使用指数或科学计数法)会被精确到 15 位。小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准:使用乘除法有助于解决上面的问题。
对于数字字符串,JS可以拥有数字内容,除了加法是级联外,其他都会尝试将字符串转换为数字进行计算。

day02


NaN 是数,typeof NaN 返回 number。Infinity (或 -Infinity)是 JavaScript 在计算数时超出最大可能数范围时返回的值。除以 0(零)也会生成 InfinityInfinity 是数:typeOf Infinity 返回 number。
NaN-非数值,属于 JavaScript 保留字,指示数字并非合法的数字,尝试用一个非数字字符串进行除法会得到 NaN(Not a Number)。您可使用全局 JavaScript 函数 isNaN() 来确定某个值是否是数。  在数学运算中使用了 NaN,则结果也将是 NaN。
JavaScript 会把前缀为 0x 的数值常量解释为十六进制。您能够使用 toString(16/8/2) 方法把数输出为十六进制、八进制或二进制(没有前缀)。
数值可以是对象,但是也可以通过关键词 new 定义为对象:var y = new Number(123),请禁止,会拖慢执行速度。值相等,但类型不同。
toString() 以字符串返回数值。数字不可直接.,必须用小括号括起来。toExponential() 返回字符串值,它包含已被四舍五入并使用指数计数法的数字,参数定义小数点后的字符数,可不写。
toFixed() 返回字符串值,它包含了指定位数小数已被四舍五入的数字,为空表示保留到整数,但不用指数计数法计数。toFixed(2) 非常适合处理金钱。toPrecision() 返回已被四舍五入的数字字符串值,它包含了指定长度的数字,不用指数计数法,如果为空,则原样输出。
在 JavaScript 中,数字可以是原始值(typeof = number)或对象(typeof = object)。在 JavaScript 内部使用 valueOf() 方法可将 Number 对象转换为原始值。没有理由在代码中使用它。所有 JavaScript 数据类型都有 valueOf()toString() 方法。
全局方法:可用于将变量转换为数字,如果无法转换数字,则返回 NaN。可用于所有 JavaScript 数据类型。
Number() 方法 Number(true)==1,Number(false)==0。解析一段字符串并返回数值,允许空格,只返回首个数字,不四舍五入:parseInt() 方法;parseFloat() 方法。
Number.MAX_VALUE:返回 JavaScript 中可能的最大数。Number.MIN_VALUE:返回 JavaScript 中可能的最小数。
Number.NEGATIVE_INFINITY==-Infinity	表示负的无穷大(溢出返回)。Number.POSITIVE_INFINITY==Infinity	表示无穷大(溢出返回)。
数字属性属于名为 number 的 JavaScript 数字对象包装器。这些属性只能作为 Number.MAX_VALUE 访问。使用 myNumber.MAX_VALUE,其中 myNumber 是变量、表达式或值,将返回 undefined。
使用数组文本创建数组时,请不要最后一个元素之后写逗号(比如 "BMW",),存在浏览器兼容性问题。最好使用该方法var array-name = [item1, item2, ...];或者var array-name = new Array(item1, item2, ...);影响速度,可读性,简洁性。
通过 JavaScript,可通过引用数组名来访问完整数组。数组是一种特殊类型的对象,数组用数字访问其“元素”,对象用名称来访问其“成员”。obj.attr==obj["attr"]。JavaScript 变量可以是对象。数组是特殊类型的对象。正因如此,您可以在相同数组中存放不同类型的变量。
length 属性返回数组的长度(数组元素的数目)。访问数组的下标越界则返回undefined。ArrayName.forEach() 为每个数组元素调用函数。(括号里边为函数名,不加小扩号,从数组中每取来一个元素就传给该函数名对应的函数,且该函数参数只有一个,用来接收数组元素)
向数组添加新元素的最佳方法是使用 push() 方法:数组名.push(新元素)//或使用 length 属性向数组添加新元素:数组名[数组名.length]=新元素;//或数组名[索引/下标]=新元素;但是这种方法添加最高索引的元素可在数组中创建未定义(undefined)的“洞”。
具有命名索引的数组被称为关联数组(或散列)。JavaScript 不支持命名索引的数组。在 JavaScript 中,数组只能使用数字索引。对象使用命名索引,数组是特殊类型的对象。
如果希望索引元素名为字符串(文本)则应该使用对象。如果希望索引元素名为数字则应该使用数组。
创建空数组:(1var temp=[ ];2var temp=new Array( );     var points = new Array(40);       // 差,new关键词使代码复杂化,创建包含 40 个未定义元素的数组!!!    null===空白(输出就是空白)
(fruits为数组名)识别数组:(1)Array.isArray( )方法:Array.isArray(fruits);     // 返回 true  (2)假如对象由给定的构造器创建,则 instanceof 运算符返回 true:fruits instanceof Array     // 返回 true
JavaScript 方法 toString() 把数组转换为数组值(逗号分隔)的字符串。   join() 方法也可将所有数组元素结合为一个字符串,默认逗号分隔,也可以自行制定分隔符,但必须放于引号之内。
pop() 方法从数组中删除最后一个元素,var temp=数组名.pop() 方法返回“被弹出”的值。
push() 方法(在数组结尾处)向数组添加一个新的元素,var temp=数组名.push() 方法返回新数组的长度。
位移元素:位移与弹出等同,但处理首个元素而不是最后一个。shift() 方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引,方法返回被“位移出”的字符串。
unshift() 方法(在开头)向数组添加新元素,并“反向位移”旧元素;unshift() 方法返回新数组的长度。
删除元素:既然 JavaScript 数组属于对象,其中的元素就可以使用 JavaScript delete 运算符来删除。使用 delete 会在数组留下未定义的空洞。delete fruits[0];           // 把 fruits 中的首个元素改为 undefined
拼接数组:splice() 方法可用于向数组添加新项,splice() 方法返回一个包含已删除项的数组。如 var removed = fruits.splice(1, 2, "Lemon"。。。); 第一个参数(1)定义了应添加新元素的位置(拼接),同时代表应删除首个元素的下标。
第二个参数(2)定义应删除多少元素,可为0。其余参数(“Lemon”,“Kiwi”)定义要添加的新元素,可被省略,没有新元素将被添加。
合并(连接)数组:concat( ) 方法通过合并(连接)现有数组来创建一个新数组。不会更改现有数组,返回一个新数组,可以使用任意数量的数组参数(数组名),逗号隔开。
裁剪数组:slice() 方法用数组的某个片段切出新数组。参数为数字,为1个时,可理解为表示从头个元素开始切去n个元素,余下的元素作为新数组返回,不更改原数组。slice() 可接受两个参数,比如 (1, 3)。该方法会从开始参数选取元素,直到结束参数(不包括)为止。返回的是end-start个元素组成的被切去的元素的新数组。
JavaScript 会自动把数组转换为字符串。所有 JavaScript 对象都拥有 toString() 方法。
数组排序:数组名.sort() 方法以字母顺序对数组进行排序,反转数组:数组名.reverse() 方法反转数组中的元素。您可以使用它以降序对数组进行排序。默认地,sort() 函数按照字符串顺序对值进行排序(即使是数字,也按字符串处理排序,类似基数排序)。
正因如此,sort() 方法在对数值排序时会产生不正确的结果。我们通过一个比值函数来修正此问题:对数组进行升序排序:points.sort(function(a, b){return a - b}); 对数组进行降序排序:points.sort(function(a, b){return b - a}); 以随机顺序排序数组:points.sort(function(a, b){return 0.5 - Math.random()}); 
如果您仅仅需要找到最高或最低值,对整个数组进行排序是效率极低的方法。arr:数组名,null万万不能省略。查找最高值:Math.max.apply(null, arr);==Math.max(num1,num2,...);查找最低值:Math.min.apply(null, arr);==Math.min(num1,num2,...);
遍历数组,查找Max值:
function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}
遍历数组,查找Min值:
function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}
排序对象数组:JavaScript 数组经常会包含对象:即使对象拥有不同数据类型的属性,sort() 方法仍可用于对数组进行排序。解决方法是通过比较函数来对比属性值。升序 如(year是cars的成员对象的数值属性):cars.sort(function(a, b){return a.year - b.year});
Array.forEach()   forEach(函数名) 方法为每个数组元素调用一次函数(回调函数)。小括号中的该函数接受 3 个参数(可使用1个参数):value项目值,index项目索引,array数组本身。
Array.map()  map() 方法,var b =a.map(函数名)//a,b均为数组。通过对每个数组元素执行函数来创建并返回“新数组”。map() 方法不会对没有值的数组元素执行函数。map() 方法不会更改原始数组。当回调函数仅使用 value 参数时,可以省略索引和数组参数。小括号中的该函数需要return 语句,接受 3 个参数(可使用1个参数):value项目值,index项目索引,array数组本身。
Array.filter()  filter()方法,var b=a.filter(函数名) 方法创建一个包含通过测试的数组元素的"新数组"。小括号中的该函数需要return语句,接受 3 个参数(可使用1个参数):value项目值,index项目索引,array数组本身。
Array.reduce()  reduce() 方法,var tempnum=a.reduce(函数名);在每个数组元素上运行函数(从左到右遍历),以生成(减少它)单个值(例如 求和)。reduce() 方法在数组中从左到右工作。另请参见 reduceRight()。reduce() 方法不会减少原始数组。回调函数名(total, value, index, array) 总数(初始值--第一个元素的值/先前返回的值),项目值,项目索引,数组本身。可省略为前两个,该函数返回1个数。
reduce() 方法能够接受一个初始值---total,即reduce(函数名,earlynumber)。earlynumber==total。
Array.reduceRight()  reduceRight() 方法完全同reduce()方法,但是是从右到左遍历访问。
Array.every()  every(函数名) 方法检查所有数组值是否通过测试。myFunction(value, index, array) 如果回调函数仅使用第一个参数(值)时,可以省略其他参数,需要return语句,返回truefalse。
Array.some()  some() 方法检查某些数组值是否至少存在一个通过了测试。语法完全同every()方法,返回一个布尔值。
Array.indexOf()  indexOf() 方法在数组中搜索元素值并返回其位置(位置下标从0开始)。array.indexOf(item, start) start:可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。未找到,返回-1,多次出现,只显示第一次出现的位置。
Array.lastIndexOf()  Array.lastIndexOf() 与 Array.indexOf() 类似,但是从数组结尾开始搜索。  array.lastIndexOf(item, start) start:可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到开头。
Array.find()  find() 方法返回通过测试函数的第一个数组元素的值。如:return value > 18;  myFunction(value, index, array) ,语法同上,接收3个参数。
Array.findIndex()   findIndex() 方法返回通过测试函数的第一个数组元素的索引。myFunction(value, index, array) ,语法同上,接收3个参数。
var d=new Date() 用当前日期和时间创建新的日期对象。JavaScript(默认情况下)将以全文本字符串格式输出日期。   var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);注意(必须按顺序填写数字):月按数组下标格式设定,与实际差一,即界面呈现比代码编辑的数字值大一。(0--11代表1--12月,首尾相接的队列,-1代表12月,13代表2月。。。)
日(1---31代表1---31号,收尾相接的队列,32代表1号,往后推一天,0代表往前推一天),时分秒均为60一轮,正的超标往后推时间,负的时间通过往前推移时间来呈现。
年份在界面正常按代码显示。 2个参数则日期中的号数为01。省略的参数默认为0。您不能省略月份。如果只提供一个参数,则将其视为毫秒。一位和两位数年份将被解释为 19xx 年。
toDateString() 方法将日期转换为日期字符串:Fri Jan 31 2020。toUTCString() 方法将日期转换为 UTC 字符串(日期显示标准)相差8小时:Fri, 31 Jan 2020 15:00:27 GMT         Fri Jan 31 2020 23:00:27 GMT+0800 (中国标准时间)ISO 8601 是表现日期和时间的国际标准。ISO 8601 语法 new Date("YYYY-MM-DD") 也是首选的 JavaScript 日期格式。3者均为数字格式,至少写一个,必须放置在引号中。
写日期也可以添加时、分和秒 ("YYYY-MM-DDTHH:MM:SS")。日期和时间通过大写字母 T 来分隔。UTC 时间通过大写字母 Z 来定义。如果您希望修改相对于 UTC 的时间,请删除 Z 并更换为一个空格,并用 +HH:MM-HH:MM 代替。
UTC(Universal Time Coordinated)等同于 GMT(格林威治时间)。在设置或获取日期时,如果不规定时区,则 JavaScript 会默认使用浏览器的时区。日期/时间将被转换为 CST(中国标准时间),如果用户从中国进行浏览。
短日期通常使用 new Date("MM/DD/YYYY");长日期通常以new Date("MMM DD YYYY"); 这样的语法来写,月和天能够以任意顺序出现,并且,月能够以全称 (January) 或缩写 (Jan) 来写。之间可加逗号,逗号会被忽略,且对大小写不敏感。JavaScript 完整日期:JavaScript 会忽略日期名称和时间括号中的错误。
getFullYear() 方法以四位数字形式返回日期年份,getMonth() 以数字(0-11)返回日期的月份,getDate() 方法以数字(1-31)返回日期的日。getDay() 方法以数字(0-6)返回日期的星期名(weekday),星期日是第一天(0)。
getHours() 方法以数字(0-23)返回日期的小时数,getMinutes() 方法以数字(0-59)返回日期的分钟数,getSeconds() 方法以数字(0-59)返回日期的秒数。getMilliseconds() 方法以数字(0-999)返回日期的毫秒数。
所有UTC日期方法是在基本方法的get后边加上UTC就行了。在设置日期中的某一项时,只需将get编程为set就行,均为数字格式。
与其他全局对象不同,Math对象没有构造函数。方法和属性是静态的。可以在不首先创建Math对象的情况下使用所有方法和属性(常量)。
数学中的π  =Math.PI;Math.round(x) 返回 x 四舍五入到最接近的整数的值;Math.pow(x, y) 的返回值是 x 的 y 次幂;Math.sqrt(x) 返回 x 的平方根;Math.abs(x) 返回 x 的绝对(正)值;Math.ceil(x) 的返回值是 x 上舍入最接近的整数;Math.floor(x) 的返回值是 x 下舍入最接近的整数;
Math.sin(x) 返回角 x(以弧度计)的正弦(介于 -11 之间的值);Math.cos(x) 返回角 x(以弧度计)的余弦(介于 -11 之间的值);Math.min() 和 Math.max() 可用于查找参数列表中的最低或最高值,各个参数之间用逗号隔开,可为数字字符串,默认为进行数字值比较。
Math.random() 返回介于 0(包括) 与 1(不包括) 之间的随机数。
您可以使用 Boolean() 函数来确定表达式(或变量)是否为真(其放于小括号中)。所有具有“真实”值的即为 True:任何(非空)字符串是 true,即使字符串 'false' 也是 true,任何表达式(除了零)是 true。所有不具有“真实”值的即为 False:0(零),-0(负零),""(空值),undefined,nullfalseNaN的布尔值是 false。
布尔可以是对象,通常 JavaScript 布尔是由字面量创建的原始值,new Boolean(false)会拖慢执行速度。对象无法进行比较,比较两个 JavaScript 对象将始终返回 false===  值相等并且类型相等;!==	 值不相等或类型不相等(有一个不等便为true);!= 只要值相等便为false。逻辑运算符:&&与,||或,!非。条件运算符 :variablename = (condition) ? value1(true:value2(false)。
如果将字符串与数字进行比较,那么在做比较时 JavaScript 会把字符串转换为对应的数值(‘2==2)。空字符串将被转换为 0。非数值字符串将被转换为始终为 falseNaN。当比较两个字符串时,"2" 大于 "12",因为(按照字母排序)1 小于 2。支持:if,else,else if,switch case,break,defalut,必须都小写(区分大小写)。default 关键词规定不存在 case 匹配时所运行的代码。如果多种 case 匹配一个 case 值,则选择第一个 caseswitch case 使用严格比较(===)。
for循环中通常语句 2 用于计算初始变量的条件。如果语句 2 返回 true,那么循环会重新开始,如果返回 false,则循环将结束。如果省略语句 2,那么必须在循环中提供一个 break。否则循环永远不会结束。JavaScript for/in 语句遍历对象的属性:
var person = {fname:"Bill", lname:"Gates", age:62}; 
var text = "";
var x;
for (x in person) {
    text += person[x];
}
JavaScript 标签:如需标记 JavaScript 语句,请将标签名和冒号置于语句之前,continue 语句(不论有无标签引用)只能用于跳过一个迭代。
break 语句,如果没有标签引用,只能用于跳出一个循环或一个 switch。如果有标签引用,则 break 语句可用于“跳出”任意代码块,代码块指的是 {} 直接的代码片段。


day03



JavaScriptJavaScript 数据类型
JavaScript 中有五种可包含值的数据类型:
字符串(string)数字(number)布尔(boolean)对象(object)函数(function)
有三种对象类型:
对象(Object)日期(Date)数组(Array)
同时有两种不能包含值的数据类型:
null  undefined
未定义变量的数据类型是 undefined   尚未赋值的变量的数据类型也是 undefined  typeof 始终会返回字符串
constructor 属性返回所有 JavaScript 变量的构造器函数。
[1,2,3,4].constructor           返回 "function Array()   { [native code] }"   [1,2,3,4].constructor              // 返回 "function Array()   { [native code] }"
通过检查 constructor 属性来确定某个对象是否为数组(包含单词 "Array"): myArray.constructor.toString().indexOf("Array") > -1;
可以检查对象是否是数组函数:    return myArray.constructor === Array;
全局方法 String() 能够把数字,布尔转换为字符串。//String(x)   
方法toString() 同理  (100 + 23).toString()           如果 myVar = {name:"Fjohn"}  // toString 转换为 "[object Object]"
全局方法 Number() 可把字符串转换为数字。空的字符串转换为 0。其他字符串将转换为 NaN(Not a number,不是数字)Number(false)     // 返回 0     Number(true)      // 返回 1     Number(null);  //返回 0   Number(' ')  //返回 0
一元的 + 运算符可用于把数字字符串变量转换为数字,var y = "5"; var x = + y;      // x 是数字  如果无法转换变量,则仍会成为数字,但是值为 NaN 。   5 + null    // 返回 5         因为 null 被转换为 0
位运算符 ^:异或      ~:非(反转所有位)  JavaScript 将数字存储为 64 位浮点数,但所有按位运算都以 32 位二进制数执行。执行按位操作后,结果将转换回 64 位 JavaScript 数。
5	00000000000000000000000000000101
~5	11111111111111111111111111111010 (-6) 补码为反码加一
//12	00000000000000000000000000001100
//~12	11111111111111111111111111110011   -1101=-13  补码为源码的反码加一,源码为补码的反码加一。补码的最高位为符号位。
万能进制转换   将bin这个数从10进制转换为2进制。
document.getElementById("demo").innerHTML = bin2dec(15);
function bin2dec(bin){
  return parseInt(bin, 10).toString(2);
}
正则表达式是构成搜索模式的字符序列。  正则表达式可用于执行所有类型的文本搜索和文本替换操作。语法   /pattern/modifiers;
在 JavaScript 中,正则表达式常用于两个字符串方法:search() 方法使用正则表达式来搜索匹配,然后返回匹配的位置。匹配不到返回-1。 方法也接受字符串作为搜索参数。字符串参数将被转换为正则表达式。       replace() 方法返回模式被替换处修改后的字符串。
replace() 也接受字符串作为搜索参数。 str.replace(/microsoft/i, "W3School"); //str:原串,右边的引号:被替换为的串, 左边的引号(被搜索的子串):正则表达式(坚决不需要双引号引起来)或字符串
var temp=/pattern/modifiers;    str.match(temp)。将符合的属于的列出来,并以逗号隔开。
正则表达式修饰符
/i  	执行对大小写不敏感的匹配。in否定前缀
/g	执行全局匹配,将符合的都列出来,逗号隔开。global全局
/m	执行多行匹配。将符合的、重复的只是列出来一个。multiple多的
正则表达式模式
括号用于查找一定范围的字符串:
[abc]	查找方括号之间的任何字符。将符合的属于的字符列出来,并以逗号隔开。
[0-9]	查找任何从 09 的数字。
(x|y)	查找由 | 分隔的任何选项。
元字符(Metacharacter)是拥有特殊含义的字符:
\d	查找数字。
\s	查找空白字符。
\b	匹配单词边界。\bch 将单词前缀为ch的列出来,只列前缀ch
\uxxxx	查找以十六进制数 xxxx 规定的 Unicode 字符。
Quantifiers 定义量词:
n+	匹配任何包含至少一个 n 的字符串。 是将这个全是n的子串列出来,而不是含有n的父字符串。
n*	匹配任何包含零个或多个 n 的字符串。
n?	匹配任何包含零个或一个 n 的字符串。
RegExp 对象是带有预定义属性和方法的正则表达式对象。 (也可不定义变量)var patt = /e/;    test() 是一个正则表达式方法。它通过模式来搜索字符串,然后根据结果返回 truefalse。patt.test(" free!"); 
exec() 方法是一个正则表达式方法。它通过指定的模式(pattern)搜索字符串,并返回已找到的文本(只输出1)。如果未找到匹配,则返回 null(空白)。  /e/.exec("The ee!");
catch(err) err.message。err.name。当发生错误时,JavaScript 通常会停止并产生错误消息。JavaScript 实际上会创建带有两个属性的 Error 对象:name 和 message。
throw 语句允许您创建自定义错误。从技术上讲您能够抛出异常(抛出错误)。异常可以是 JavaScript 字符串、数字、布尔或对象。catch(err)中的参数err用来接收抛出的东西。
JavaScript 拥有当错误发生时提供错误信息的内置 error 对象。
在 JavaScript 中有两种作用域类型:
局部作用域   因此能够在不同函数中使用同名变量。在函数开始时会创建局部变量,在函数完成时会删除它们。函数参数也是函数内的局部变量。
全局作用域   函数之外声明的变量,会成为全局变量。如果您为尚未声明的变量赋值,此变量会自动成为全局变量。在“严格模式”中不会自动创建全局变量。严格模式中的 JavaScript 不允许在未被声明的情况下使用变量,对象。
在 HTML 中,全局作用域是 window。所有全局变量均属于 window 对象。全局变量会在您关闭页面时被删除。
Hoisting 是 JavaScript 将所有声明提升到当前作用域顶部的默认行为(提升到当前脚本或当前函数的顶部)。在 JavaScript 中,可以在使用变量之后对其进行声明。换句话说,可以在声明变量之前使用它。用 letconst 声明的变量和常量不会被提升!JavaScript 只提升声明,而非初始化。
"use strict";指令只能在脚本或函数的开头被识别。通过在脚本或函数的开头添加 "use strict"; 来声明严格模式。删除变量(或对象)、删除函数,重复参数名,八进制数值文本,转义字符,写入只读属性,写入只能获取的属性,with 语句, eval() 在其被调用的作用域中创建变量是不允许的;字符串 "eval",字符串 "arguments"  不可用作变量。在类似 f() 的函数调用中,this 的值是全局对象。在严格模式中,现在它成为了 undefined。
JSON ( JavaScript Object Notation)是存储和传输数据的格式。JSON 经常在数据从web服务器发送到网页时使用。是轻量级的数据交换格式,JSON 格式是纯文本。
JSON 语法规则:数据是名称/值对 由(双引号中的)字段构成,数据由逗号分隔,花括号保存对象,方括号保存数组。JSON 不允许使用尾随逗号。  创建包含 JSON 语法的 JavaScript 字符串,使用 JavaScript 的内建函数 JSON.parse() 来把这个字符串转换为 JavaScript 对象。
JSON 的一个常见用途是将数据发送到Web服务器。将数据发送到 Web 服务器时,数据必须是字符串。JavaScript 函数 JSON.stringify() 将其转换为json字符串。
多行字符串:如果使用反斜杠转义,ECMAScript 5 允许多行的字符串文字(字面量);分解字符串文字的一种更安全的方法是使用字符串添加:"+"。   ECMAScript 5允许保留字作为属性名称。
let 语句允许您使用块作用域声明变量。const 语句允许您声明常量(具有常量值的 JavaScript 变量)。常量类似于 let 变量,但不能更改值。ES6 允许函数参数具有默认值。
箭头函数(Arrow Function)箭头函数允许使用简短的语法来编写函数表达式。您不需要 function 关键字、return 关键字以及花括号。使用 const 比使用 var 更安全,因为函数表达式始终是常量值。箭头功能没有自己的 this。它们不适合定义对象方法。箭头功能未被提升。它们必须在使用前进行定义。
如何加速您的 JavaScript 代码。减少循环中的活动,减少 DOM 访问,缩减 DOM 规模,请不要创建不打算存储值的新变量,避免使用 with,延迟 JavaScript 加载,请把脚本放在页面底部,使浏览器首先加载页面。
HTTP 规范定义浏览器不应该并行下载超过两种要素。一个选项是在 script 标签中使用 defer="true"。defer 属性规定了脚本应该在页面完成解析后执行,但它只适用于外部脚本。
JavaScript 中的数字均保存为 64 位的浮点数(Floats),使用乘除运算转换小数点,避免出现小数。因为一个错误的分号,此代码块{}无论如何都会执行,在一行的结尾自动关闭语句是默认的 JavaScript 行为。JavaScript 会在行末关闭 return 语句,因为它本身就是一条完整的语句。所以,绝不要对 return 语句进行换行。
您可以通过测试类型是否为 undefined,来测试对象是否存在;必须测试对象是否为 null,而不是未定义:if (typeof myObj !== "undefined" && myObj !== null)。
JavaScript 会为每个代码块创建新的作用域!!!
<script>
for (var i = 0; i < 10; i++) {
  // some code
}
document.getElementById("demo").innerHTML = i;
</script>
所有在函数中使用的变量应该被声明为局部变量。

局部变量必须通过 var 关键词来声明,否则它们将变成全局变量。一项好的编码习惯是把所有声明放在每段脚本或函数的顶部。请使用 /()/ 来代替 new RegExp()。请使用 {} 来代替 new Object()。JavaScript 属于松散类型。变量可包含不同的数据类型,并且变量能够改变其数据类型。用字符串减去字符串,不会产生错误而是返回 NaN(Not a Number)。
用字符串减去字符串,不会产生错误而是返回 NaN== 比较运算符总是在比较之前进行类型转换(以匹配类型)。如果调用函数时缺少一个参数,那么这个缺失参数的值会被设置为 undefined。
undefined 值会破坏您的代码。为参数设置默认值是一个好习惯。使用 default 来结束您的 switch 语句。即使您认为没有这个必要。eval() 函数用于将文本作为代码来允许。在几乎所有情况下,都没有必要使用它。因为允许任意代码运行,它同时也意味着安全问题。



day04


在函数中,严格模式下,this 是 undefined。在方法中,this 指的是所有者对象。在 HTML 事件处理程序中,this 指的是接收此事件的 HTML 元素。
call()apply() 这样的方法可以将 this 引用到任何对象。都可以用于将另一个对象作为参数调用对象方法。(A对象的方法调用call/apply方法,并将B对象作为call/apply方法的参数,this就是指该B对象,就近原则)
在浏览器窗口中,全局对象是 [object Window]。在单独使用时,拥有者是全局对象,因此 this 指的是全局对象。在严格模式中,如果单独使用,那么 this 指的是全局对象 [object Window]。
在函数中,函数的拥有者默认绑定 thisthis 指的是全局对象 [object Window]。
在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域。letconst,这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量)。
通过 var 关键词声明的变量没有块作用域。在块 {} 内声明的变量可以从块之外进行访问。使用 let 关键字重新声明变量可解决在块中重新声明变量不会重新声明块外的变量。
在循环中使用 var,循环结束之后是循环后的结果,而不是循环前定义的那个值。在循环中使用的变量使用 let 并没有重新声明循环外的变量,只有在循环内,变量 i 才是可见的。
在函数内声明变量时,使用 varlet 很相似,它们都有函数作用域。如果在块外声明声明,那么 varlet 也很相似,它们都拥有全局作用域。
在 HTML 中,全局作用域是 window 对象。通过 var 关键词定义的全局变量x属于 window 对象,能window.x。通过 let 关键词定义的全局变量x不属于 window 对象,即不能window.x。
在相同的作用域,或在相同的块中,(1)通过 let 重新声明一个 var 变量是不允许的(2)通过 let 重新声明一个 let 变量是不允许的(3)通过 var 重新声明一个 let 变量是不允许的。(4var可以重新声明var变量。(5)在不同的作用域或块中,通过 let 重新声明变量是允许的。(6)通过 var 声明的变量会提升到顶端。通过 let 定义的变量不会被提升到顶端。
(1)通过 const 定义的变量与 let 变量类似,但不能重新赋值。(2)在块作用域内使用 const 声明的变量与 let 变量相似。(3)JavaScript const 变量必须在声明时赋值。(4)它没有定义常量值。它定义了对值的常量引用。(5)您可以更改(添加)常量对象的属性,但是您无法重新为常量对象(整体)赋值。(6)您可以更改(添加push())常量数组的元素,但不可整体赋值。(7)在同一作用域或块中,不允许将已有的 varlet 变量重新声明或重新赋值给 const。(8)在另外的作用域或块中重新声明 const 是允许的。(9)通过 const 定义的变量不会被提升到顶端,const 变量不能在声明之前使用。
查找编程代码中的错误被称为代码调试。通常通过 F12 键启动浏览器中内置的调试器,然后在调试器菜单中选择“控制台”。debugger 关键词会停止 JavaScript 的执行,类似在调试窗口中,您可在 JavaScript 代码中设置断点。调试是测试、找到并减少计算机程序中 bug(错误)的过程。
代码约定确保质量:改善代码可读性,提升代码可维护性。空格:始终在运算符( = + - * / )周围以及逗号之后添加空格。代码缩进:始终使用对代码块缩进使用 4 个空格。语句规则:始终以分号结束单条语句。请在第一行的结尾处写开括号。
请在开括号前使用一个空格。请在新行上写闭括号,不带前导空格。请不要以分号来结束复杂语句。对象规则:把开括号与对象名放在同一行。在每个属性与其值之间使用冒号加一个空格。不要在最后一个属性值对后面写逗号。请在新行上写闭括号,不带前导空格。请始终以分号结束对象定义。
为了提高可读性,请避免每行的长度超过 80 个字符。换行的最佳位置是运算符或逗号之后。JavaScript 命名不允许使用连字符。JavaScript 命名请不要以 $ 符号开头。此举会引起 JavaScript 库名称冲突。使用简单的语法来加载外部脚本(type 属性不是必需的)。JavaScript 文件应该使用 .js 扩展名。大多数 web 服务器(Apache、Unix)对文件名的大小写敏感,所以使用小写文件名。对于开发中的脚本,应该优先考虑可读性。


学了之后,如果不经常使用,过了不久便会忘记,学会总结,善于总结是一种习惯!以便于忘了之后,回来翻看便能迅速拾起知识!!!

多动手,多总结!
多动手,多总结!
多动手,多总结!
发布了32 篇原创文章 · 获赞 1 · 访问量 2820

猜你喜欢

转载自blog.csdn.net/YOUAREHANDSOME/article/details/104807720