发表于: 2019-12-18 18:34:57

0 1379


今天完成的事情:


基本完工  https://zhuchunyu1995.github.io/xzy/JS/task1/task-1.html


今天主要优化了代码,把多余的或可以去掉的代码省略掉了,加深了印象。


刚开始不懂的时候感觉真的很难,做完了发现还可以。




任务一深度思考:


JS有哪些数据类型和常用方法?

值类型,基本类型:


字符串(String) length 来计算字符串的长度:
var name= “buff”; var 创建一个变量,变量名为 name, "buff"为字符串
字符串可以是单引号或双引号中的任意文本。
全局方法String() 可以将数字转换为字符串。String()
该方法可用于任何类型的数字,字母,变量,表达式

toString()也是有同样的效果,不能转Null,undefined两种类型



object Undefined 的中文意思是 对象未定义




自动转换类型

5 + null    // 返回 5         null 转换为 0
"5" + null  // 返回"5null"   null 转换为 "null"
"5" + 1     // 返回 "51"      1 转换为 "1"
"5" - 1     // 返回 4         "5" 转换为 5
数字(Number)
全局方法 Number() 可将日期转换为数字。
d = new Date();
Number(d)      





布尔(Boolean)
Boolean(布尔)只有两个值:true、false。
undefined,null,NAN,"",0,false为false,其余全为true

空数组是true,对象也是true,一般都用空数组的length来判断数组有没有数据




写法规范
在js中写Boolean和判断相关的代码时,都会要求遵循一定的编码规范:
用===判断来代替==,能用全等的地方永远用全等而不要用==
因为===会先判断数据类型,数据类型不同直接返回false
而==会先进行数据转换
同理推荐使用!==而不是!=
例如
console.log('0'==0);//true  console.log('0'===0);//false
基本上就是
undefined等于undefined undefined等于null
NaN不等于任何 甚至不等于另一个NaN
除了上述类型有数字优先转数字
都是对象保证引用同一对象,否则将对象转ToPrimitive(抽象操作)再对比
在if中判断字符串和数组有没有值,要采用简写
写成if(val)和if(arr.length)
而不是if(val!=='')和if(arr.length>0)
对空(Null)
Null类型只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
在 JS 中 null 表示 "什么都没有"。
null是一个只有一个值的特殊类型。表示一个空对象引用。
用 typeof 检测 null 返回是object。
可以设置为 null 来清空对象:
var person = null;



var person = undefined; 变量可以通过设置 undefined 来清空。



未定义(Undefined)
Undefined类型也只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
typeof 一个没有值的变量会返回 undefined



Symbol
生成一个全局唯一的值。
Symbol 数据类型的特点是唯一性,即使是用同一个变量生成的值也不相等。



————————————————————————————————————————
引用数据类型:
对象(Object)
对象分为键和值
var name=
{
age : "53岁";  age是键,53岁是值
可以在对象里设置函数,引用函数需要加(),不加引用函数表达式,对象是全局属性
}
数组(Array)
数组下标是基于零的,所以第一个是 [0],第二个是 [1],以此类推。



可以用for循环来实现引用整个数组
函数(Function)

function 声明一个函数
可以在函数内引用,可以在函数中声明
JS中函数有两种命名方式
1、一种是声明式
声明式会导致函数提升,function会被解释器优先编译。即我们用声明式写函数,可以在任何区域声明,不会影响我们调用 function XXX(){}
一种是函数表达式
函数表达式中的function不会出现函数提升。而是JS解释器逐行解释,因此如果调用在函数表达式之前,则会调用失败
var k = function(){}
fn1(); function fn1(){}    可以正常调用 fn2(); var fn2 = function(){}    无法调用
对函数表达式加上(),是可以直接调用的
但是如果是对声明式的后部加上()则是会被编译器忽略。
var fn2 = function(){}();    对,就是这样
function fn1(){}();           会被忽略
而平常的function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式,(加上+-号都可以),从而可以用()来直接调用
(function fn1(){})();
叹号后面跟函数!function
和加号后面跟函数+function
都是跟(function(){})();这个函数是一个意思,都是告诉浏览器自动运行这个匿名函数的,因为!+()这些符号的运算符是最高的,所以会先运行它们后面的函数



定时器有哪些用法?
定时器分为两种
一种是一次性的,时间到就执行
var timer=setTimeout(fun,毫秒数);
清除的方法
clearTimeout(timer);
第二种是周期性的,根据设定的时间周期进行
var timer=setInterval(fun,毫秒数);
清除的方法

clearInterval(timer);


var timer=setInterval(fun,毫秒数);这种的可以无限循环到你关闭它为止,记得在点击之前清除定时器,如果叠加会加快速度,越来越快的。。 任务一用到的理解就是定时器设置好了要清除,深层次的还需继续理解和尝试。


定时器的俩种思路

   第一种类似开关,应用这种是当时想不出更好的办法了,会越闪越快。可以实现一次点击闪,再次点击关闭,但是多次点击会生成多个定时器,就关不住了,知道要清除,但是没明白在哪清除


这个思路是用if判断  绝对等于,值和类型都等于的时候开启,多次点击因为不相等,所以无效,就无法生成第二个定时器,在关闭处清除定时器,清除之后值又等于上方判断,循环开关,大概是这样,理解还不够深刻。。。    这个方法会有一点点延迟



今天解决了上面提到的问题,就是不知道在哪清除定时器,在开始之前清除就可以阻止生成多个定时器了



第二种试了下,效果是静态的



ID和Class有什么区别? 
IID权重和优先级比class高,
id对应一个元素
class对应多个元素, 多个元素可以有同一个class但是不能有同一个id
——————————————————————————————————

F12Console的用法,以及如何Debug程序

console.log 用于输出普通信息
console.info 用于输出提示性信息
console.error用于输出错误信息
console.warn用于输出警示信息
console.group输出一组信息的开头
console.groupEnd结束一组输出信息




console.assert对输入的表达式进行断言,只有表达式为false时,才输出相应的信息到控制台
console.count  当你想统计代码被执行的次数




——————————————————————————————


使用Console.group()和Console.groupEnd()包裹分组内容。



还可以使用Console.groupCollapsed()来代替Console.group()生成折叠的分组。


Console.group()还可以嵌套使用





表格输出

使用console.table()可以将传入的对象,或数组以表格形式输出。适合排列整齐的元素





debugger调试


可以在JS里写 debugger  进入调试页面刷新就会出现



也可以手动添加 







深度思考还有俩个没看,明天理解下


随机的出现一种颜色,随机的性能怎么样? 这个理解了,需要描述下,明天把颜色判定弄完一起写吧


简述JS中执行环境与作用域的关系? 这里还没看。。看了太多资料迷糊了,再看下去感觉也吸收不了多少了。。 明天继续加油


返回列表 返回列表
评论

    分享到