1314xxxxxx 发表于 2017-7-6 20:43:09

javascript从入门到精通6-9课

javascript笔记:第二天



javascript基础01

js组成
ECMAscript 解释器(他把js代码翻译成0和1,再把计算机返回给我们的0和1变成网页)
Document Object Model(DOM) 它赋予了js获取HTML元素的能力
Browser Object Model(BOM) 它赋予了js操作浏览器的能力

兼容性
ECMAscript几乎没有兼容性问题,但是还是有一点点。
DOM 有一些操作不兼容。
BOM 基本都不兼容。


数据类型
数字 number
浮点数 float
字符串 string
布尔(真或假) boolean
函数 function
对象 Object
未定义(没有类型) unpdefined

虽然javascript是弱类型语言,但是一个变量尽量还是不要一会儿是这个类型,一会儿是那个。


数据类型转换(ps:通过input输入进来的都是字符串)

字符串转数字

强制类型转换
parseInt(string)
注意,parseInt是从左到右扫描字符串,如果找到任何非数字的东西,他就会跳出扫描,把他前面扫描到的数字返回。如果扫描到了非数字,而在那之前没有扫描到数字,他就会返回NaN(Not a Number,非数字)。(任何数字与NaN计算都会变成NaN,更加奇葩的是,任何一个NaN都与另一个NaN不同)

isNaN函数
可以用来检测数字的值是不是NaN。

parseFloat
这个很简单,用法和parseInt一样。就是转成浮点数(小数)而已。


隐式类型转换
说白了就是你没有告诉计算机要做类型转换,但计算机还是转了。
==会提前为你做隐式类型转换,===则不会。
字符串在做减法运算时,如果字符串都是数字,他就会先做类型转换。
那为什么加法就不会呢?
原因很简单,加法在做有数字相加和字符串相加的两种功能,但是减法又不能做字符串相减……


作用域
局部变量 只能在函数中使用。
全局变量 在函数外声明,在script元素中的任何地方都能使用。


闭包
函数内的所有函数都可以访问函数内的局部变量。


命名规范(用于变量名或函数名)
可读性 看得懂
规范性 符合规则
那么,规则是什么呢?
一般都是匈牙利命名法。
类型前缀
a数组
o对象
n数组
......(给函数取名时就不用前缀了)

每个单词首字母大写


if...else的扩展(else if)
说白了,不就是除了if和else以外的可能性。
else if 可以写无限个。
ECMAscript会从if开始,看看有没有符合可能性的,如果有,就执行里面的语句;若果没有,就会执行else语句。

运算符

加减乘除取模都不用说啦
在js中,/号是会除出小数的,所以可以使用parseInt。

但是,也有几种有趣的:+=,-=......

逻辑运算符
& and 两边的语句必须都为True
|| or 只要一个语句为True
! not 语句为True,则为False;语句为False,则为True。

运算符优先级改变方法,跟数学一样,是“()”


流程控制
if高级用法:
if()
{
}
else if()
{
}
......
else
{
}

switch:if的好兄弟
switch(undated)
{
    case 值1:
      command
      break
    ......
    default:
         command
}

三目运算符(?:)
条件?语句1:语句2

while、for(不用说啦~)
break 中断整个循环
continue 中断一次循环

True:not 0,非空字符串,True,非空对象
False:0,空字符串,False,null,undefined


Json

什么是Json?
类似于python的字典
用法与字典相同。

json与数组的区别
json的下标是字符串,而数组的下标是数字。
数组有length,json没有。

json与for in
for in和python的for循环一样,话说回来,那json就是迭代器加字典

函数返回值(不用说)
返回值-return,返回值只有一个。

可变参(arguments)
arguments就是一个数组,他存放着调用者传进来的参数(可以有无限个)

获取非行间样式
写在元素内的sytle是行间样式,用元素的style来获取。而非行间样式就是写在style里或是在一个层叠样式表里的样式,用currentStyle属性来获取。
js第二定律:但凡是好东西,一定不兼容。比如currentStyle,只能在IE中用。
在Chrome或Firefox里就只能用getComputedStyle。
getComputedStyle(元素,随意)
但是getComputedStyle不能在IE下用。这时候,我们会发现在Firefox里currentStyle的值是undefind,而undefind可以是false。嘿嘿,接下来大家都懂......
在css里,有两种样式
复合样式(自己取的名字):比较复杂
单元样式(也一样):简单
PS:js无法获取非行间复合样式。

数组
数组的定义
var ArrayName =
var ArrayName = new Array(values......)
作用一样。
数组属性
只有length,好玩儿的是length是可以设置的。比如一个有8个元素的数组,把他的length设置为3,那么后5个元素就会被删除(学黑客技术的要注意了,大漏洞啊……)
数组方法
添加
ArrayName.push(newValue)-这是从尾部添加
ArrayName.unshift(newValue)-这是从头部添加,渐近时间较长
splice(start,values.......)
减少
ArrayName.pop(willDeleteValue)-这是从尾部减少
ArrayName.shift(willDeleteValue)-从头部减少,但是渐近时间较长
splice(从那个位置开始删,到哪里结束)
替换
splice(从哪里开始,换掉哪些,values......)
数组链接
Array.concat(newArray)-连接两个数组
Array.join(链接符)-链接数组中的所有元素
数组排序
Array.sort()
注意,如果数组中是字符串的话,那么会对照英文单词表,按首字母排序。
可怕的是,sort不会把数字当作数字,而是当作字符串(你懂的)

定时器
开启
setInterval(aFunction,time)
每过time毫秒,执行一次函数。会一直执行
setTimeout(aFunction,time)
过了time毫秒,执行一次函数。
关闭
clearInterval(定时器名)
返回值,如果成功,就是定时器名本身。

日期
获取时间:var name = new Date()
返回值:object
方法:getHours(获取是第几小时),getSeconds(获取是第几分钟),getMinutes(获取是第几秒),getFullYear(获取年),getMonth(获取月,注意,这个方法有些诡异,他是从0-11月的),getDate(获取是几号),getDay(获取星期几)

PS:低版浏览器无法把字符串当作数组使用。所以,我们可以用charAt方法。


页: [1]
查看完整版本: javascript从入门到精通6-9课