avaScript ECMAScript语法思维导图见文章底部
为了存储和复用一个数据,方便修改
当声明一个变量的时候 var a=10 ,会在内存中开辟以一个空间 存放变量名和变量值 ,会将变量和值存放到window对象中 a:10
全局作用域中的变量 可以在该脚本文件中的任何地方访问到
局部作用域中的变量 局部变量只能在该函数中访问到
在局部作用域中(函数中)声明变量 如果未加关键字 var || let || const 这个变量就会变为隐式全局变量
function a(){
num=1;
}=>
var num;
function a(){
num=1;
}
/*只有num1 是局部变量 , num2 和 num3 是隐式全局变量*/
function a(){
var num1=num2=num3=100;
}=>
var num2;
var num3;
function a(){
var num1=100;
num2=100;
num3=100;
}
声明关键词 var let const 变量名区分大小写
命名规范
一般以字母、$、下划线、数字组成(不能以数字开头) 不能使用系统关键词和保留字 一般遵循驼峰命名法(第一个单词首字面小写后面单词首字母大写) 变量名需得有意义
变量预解析只会将变量的声明提升到该作用域的最前面
console.log(a) // undefined
var a=10;=>
var a
console.log(a) // undefined
a=10
变量预解析只会将变量的声明提升到该作用域的最前面
b()
function b(){
}=>
function b(){
}
b()
直接在浏览器中Sources添加断点 或者在编辑器中在语句之后添加 debugger
计算机里面有很多数据,JS为了方便调试与使用,提供了一些对应的辅助方法,将它们做了归类,就是数据类型。
1.1. 整数=> 正数 负数 1.2. 小数 1.3. NaN Not a Number=> 不是一个数字 判断一个数字是否是非数字isNaN(x) 返回布尔值 true是一个非数字,false不是一个非数字
isNaN(undefined) // true
isNaN(null) // false
NaN不等于任何值,包括它自己
Infinity // 无穷大
-Infinity // 无穷小
Number.MAX_VALUE /*最大值*/
Number.MIN_VALUE /*最小值*/
+:加
-:减 *:乘 /:除 %:求模 任何数除以0为无穷大 任何数-*/%字符串为NaN (除了+)
复合运算符
+=<a+=1=> a=a+1> -=<a-=1=> a=a-1> "=" <a=1=> a=a*1> (乘等于) /=<a/=1=> a=a/1> %=<a%=1=> a=a%1>=====两个等于和三个等于的区别 两个等于只对比值 三个等于对比值和数据类型
自增自减运算符 a++ ++a a-- --a
2.1 字符串的长度str.length 2.2 字符串加号运算 会将数据与数据拼接字符串 + 任何数据类型=拼接之后的新的字符串
true=> 1 false=> 0
用布尔值来判断条件真假
未定义
空
null 表示一个值被定义了,定义为null undefined 表示一个值声明了 但是未定义(未赋值) 所以设置一个值为null是合理的 设置一个值为undefined是不合理的 null==undefined // true null===undefined // false 说明 null 和 undefined 在转boolean 的时候都为 0 值相同 所以==为true ,数据类型不一样===为false
new
new Array()
new Array(初始长度)
new Array( 1 , 2 , 3 )
字面量
[ ]
[ 1 , 2 , 3 ]
元素: 数组中的值就是元素 下标(索引): 下标从0开始 长度: length 数组的长度 从1开始
正叙遍历
for(let i=0; i < arr.length; i++){
/*代码块*/
}
倒叙遍历
for(let i=arr.length; i > 0; i--){
/*代码块*/
}
栈操作 先进后出
arr.unshift() /*从头部放入*/
arr.shift() /*从头部取出*/
arr.push(); /*从尾部放入*/
arr.pop(); /*从尾部取出*/
队列操作 先进先出
arr.unshift() /*从头部放入*/
arr.pop(); /*从尾部取出*/
arr.push(); /*从尾部放入*/
arr.shift() /*从头部取出*/
声明式创建函数
function fn (){
//代码块
}
匿名方式创建函数
let fn=function(){
//代码块
}
函数对象
let fn=new Function("形参","形参","代码块") /*前面的都是参数,最后面的参数是代码块*/
函数中 return 将数据给调用者 函数中遇到 return 直接跳出函数 后面代码不执行 函数默认 return undefined
只有声明式的函数和变量才会预解析 先调用 -> 后声明 在js执行的时候 浏览器会执行 预解析的操作
预解析会把所有的 声明式 创建的函数(包括变量) 提升到当前作用域的最顶端
函数内部的特殊属性 用来保存实参列表 arguments 是一个 伪数组=> 不是数组 但是具有数组的特性(下标索引、长度、可以进行循环遍历) 可以模拟函数重载=> 同一个函数,因为传递的实参数量不同,可以执行不同的操作
/*工厂函数*/
function createStr(name,age){
let obj=new Object()
obj.name=name
obj.age=age
obj.sayHi=function(){
console.log(this.obj)
}
return obj
}
let obj1=createStr("蓝海",11)
/*构造函数*/
function StuInFo(name,age){
this.name=name
this.age=age
this.sayHi=function(){
console.log(this.obj)
}
}
let obj2=new StuInFo("蓝海",11)
构造函数相对于自定义类(class) 1.变量名一般用名词,首字母大写 2.构造函数中 不需要我们去创建对象、返回对象 3.构造函数一般 被 new 关键词调用
new 关键字 做的四件事
创建空对象 将空对象 传递给 构造函数 里面的 this 调用构造函数 返回对象
声明的时候直接调用执行
(function("形参列表"){
/*代码块*/
})("实参列表")
new
let obj=new Object()
||
let obj=new Object({
name : "蓝海",
age : 11
})
字面量
let obj={ }
||
let obj={
name : "蓝海",
age : 11
}
对象中的this就是这个对象 可以通过this.属性名 在对象的方法中访问对象里的其他属性或方法
typeof检查简单数据类型[值类型] 返回的是 字符串类型的数据类型
typeof(123)=> "number"
/*注意点*/
typeof(typeof(123))=> "string"
typeof(null)=> "object"
typeof(Infinity)=> "number"
typeof(NaN)=> "number"
typeof(new Date())=> "object"=> /*typeof检查其他new出来的对象 都返回 object*/
/*typeof() 复杂数据类型object、array 和 null 都返回 object
typeof(function)=> function // 函数除外
*/
instanceof检查复杂数据类型[引用类型] 返回boolean值
数据名 instanceof 数据类型 /*[Function||Object||Array]*/
返回 false 或 true
只能检查复杂数据类型 简单数据类型都返回false
typeof用来检测简单数据类型 返回值是一个字符串的数据类型 instanceof用来检测复杂数据类型 返回的是boolean值 如果用来检测简单数据类型都会返回false
str.tostring() 默认模式把变量转换为字符串 || 基模式 String(str) 把特殊值转换为字符串 String(undefined)=> “undefined” 加号拼接字符串
parseFloat(str) 把字符串转换为浮点数(小数) parseInt(str) 把字符串转换为整数
{Number(str) 任何数据转换为整数
如果字符串截去开头和结尾的空白字符后, 不是纯数字字符串,那么最终返回NaN。 如果字符串中只包含了数字,(包括前面带正号和负号), 则将其转换为十进制数值,即"1"->1,”011“->11 如果字符串是空的""则返回0 如果字符串包含除了上面的格式之外的字符,则将其转换为NaN
boolean true转换为1 false转换为0
null 返回 0
undefined 返回 NaN
}
Boolean()
将布尔字符串转成布尔值 除了 0、false 、undefiend、NaN、null 转换为false 其他都为true
console.log("转义符的应用\"嗯") ->[转义符的应用“嗯] 常用
戳一下 之前总结的常用内置对象博客
一些很简单条件判断这里就不说了哈
条件 ? true : false
/*相对于 if (a===1) 用来做全等判断*/
break /*每个case里面的代码断都要写 break 否则会穿透*/
/*合理使用switch穿透 <当多个case要执行的代码需求一样的时候>*/
default /*如果case都不匹配的情况下 会执行 default 里面的代码*/
&& 与 一假则假 || 或 一真则真 ! 非 取反
for 循环体上面的 i 变量的作用域是全局作用域 如果在函数中使用就是局部作用域 一般建议使用let 关键词来声明 i
for (let i=1;i < 10; i++){
/*代码块*/
}
/*拆解为*/
let i=1;
for(;i<10;){
/*代码块*/
i++;
}
先执行do里面的代码块 再条件判断
do{
/*代码块*/
}while(boolean)
先条件判断 再执行代码块
while(boolean){
/*代码块*/
}
do-while 不管条件是否成立 都会执行一次do里面的代码块 然后再进行条件判断 while 先进行条件判断 再执行代码块
遍历对象
for(let "属性名" in "对象"){
/*访问对象中的属性或方法*/ /*这里的属性名已经是string类型 所以无需再加引号*/
obj[name]=> /*对象[属性名]*/
}
break 跳出整个循环 后面的循环不再执行 continue 跳出本次循环 继续执行后面的循环
若有感兴趣的小伙伴,需要JavaScript ECMAScript语法思维导图原图的,关注我,私信回复获取:ECMAScript语法思维导图
作者:蓝海00
链接:https://www.jianshu.com/p/5a5fb2b78d13
者:杨朝清
近日,针对网友“大理洱海步道电动车租赁年龄限制60岁太低、希望放宽”的建议,云南大理市洱海管理局回应称,将认真调研此问题,配备由专职工作人员驾驶的观光车、酒吧车等。
应当说,涉事企业限制骑行年龄,是基于风险防范。一方面,出于骑行安全的考虑,国内大多数城市(包含大理市)在城市标准道路上行驶、运营的共享电动车高龄限制为65周岁;另一方面,由于该步道游客行人多、路况复杂,且部分路段弯道较多、多数路段临靠湖边不具备安装护栏条件,对骑行用户的车辆操控反应、身体素质要求更高,“骑行限制60周岁以下”隐伏着良苦用心。
但一项为游客着想的举措,为何会遭遇批评质疑?风险防范没有原罪,却也要把握好尺度。伴随着生活品质的优化、医疗卫生的改善以及全民健康意识的提升,不少人即使年龄过了60周岁被贴上了“老年人”的身份标签,也依然有着较好的身体素质。
早在2020年10月,公安部门就放宽小型汽车驾驶证申请年龄,取消70周岁年龄上限。对70周岁以上人员考领驾驶证的,增加记忆力、判断力、反应力等能力测试,保证身体条件符合安全驾驶要求。“骑行限制60周岁以下”虽然初衷良善,但方法僵化、在操作过程中不够人性化,最终导致效果不尽如人意。
“骑行限制60周岁以下”不仅让游客的利益诉求没有得到满足,也让其权利与尊严受到了损害。害怕承担责任、担心摊上事儿,让一些地方戴上了“有色眼镜”,对老人群体另眼相看。
打破年龄歧视,关键在于减少商家的后顾之忧,通过专门的责任保险实现商家、消费者和保险公司的良性互动,实现三方风险共防、责任共担,以降低商家的压力与风险。让商家轻装上阵,他们才会更有底气和勇气来接纳老人群体。在做好风险防范的同时,商家也要为老人群体提供更加差异化、精准化、个性化的服务,赢得他们的青睐。
在老龄化趋势之下,“银发经济”成为一座市场富矿。只有兼顾多元主体的利益诉求,“骑行限制60周岁以下”的人为藩篱才会被打破。更进一步说,建设老年友好型社会,不仅需要公共部门的“制度补血”和社会层面的尊老敬老,也需要市场力量融入其中,让老年人被温柔相待。
每一个人都终将老去,老年人的需求不能被忽略和漠视。树立和培育积极的老龄观,以积极的态度、政策、行动应对人口老龄化。当尊重和善待老年人蔚然成风,老年人的美好生活才会“有爱无碍”。(杨朝清)
来源: 光明网-时评频道
024年8月1日,正是贵阳市小学新生入学报名的时候,家长们到学校依次排队等待老师审核报名资料。
突然,一名黑衣男子向正在审核资料的老师跪了下去,嘴里不停说道:“不要报警、不要报警......”然而,老师并没有理会这名男子的请求,随即拨通了报警电话。男子见势不妙,起身迅速逃离了现场。
接到报警后,西湖路派出所民警立即赶到学校,原来黑衣男子所带来的报名资料有假!
民警仔细核实,这男子带的户口簿是西湖路派出所的“高仿版”。虽然极其相似,但一些体现在户口簿上的工作细节是仿不出来的。
图丨假户口本
民警再对该男子带来的所有资料进行核实,发现皆是伪造。
后调取学校监控溯源排查,入学报名的这段时间里,黑衣男子常到南明、云岩、观山湖、花溪、清镇等地的学校周边出入。
侦查民警开始着手调查,却发现该男子居无定所、行踪飘忽。侦查民警遂分组到各个学校周边蹲守,伺机出击。
8月2日,在花溪区一小学,黑衣男子又出现在排队的家长中,民警迅速出击,将黑衣男子抓获。
图丨犯罪嫌疑人陈某勇离开学校视频截图
“昨天还在南明求放过,今天又到花溪排队报名了!”
经调查,黑衣男子名叫陈某勇,为了获取家长“好处费”,自称自己“有关系”“有捷径”,能让孩子读上心仪的学校,因此,16名学生家长“慕名”而来。而为了让新入学的学生能“报名成功”,陈某勇每天持多份假证辗转于不同的学校。
陈某勇曾因伪造使用国家证件被公安机关打击过,出狱后又重操旧业。
那么,这些假证从何而来呢?
民警决定从陈某勇入手,寻线侦查,发现陈某勇经常开车到威清路一巷内老旧小区里。侦查民警立即对小区进行摸排,最后,目标锁定小区顶楼的出租屋。
如何神不知鬼不觉的情况下,打开顶楼出租屋的门呢?
侦查民警分组轮流在该出租屋的入口处设伏,24小时蹲守。三伏天户外气温三十几度,站着不动也汗涔涔的;设伏的地方往往是树下或楼道,蚊虫特别多。面对恶劣天气,侦查员始终努力坚持。
图丨侦查民警在嫌疑人家中查获大量假证
连续蹲守很长时间,顶楼的房门还是紧闭不开。直到8月6日上午,顶楼终于有人出来,民警随即迅速打开顶楼房门、冲进屋子。
民警却被屋子里的场景震撼了!
只见屋内的地板上、沙发上、茶几上,甚至床上,都摆满了大小不一、五颜六色的证书。
有蓝色的毕业证、墨绿的技术职称证、黑色的资质认定证、白色的身份证、深褐的学士学位证、朱红的户口簿。还有许多伪造的印章,涉及全国各地许多单位。为了便于查找,还以省为分类标准,分门别类,用塑料袋装好。
这不只是一个伪造证件窝点了,这完全是一个加工厂。
图丨制造假证工具
民警冲进去时,屋里的两个人还在忙碌“作业”,制作假证。
经审讯,男子陈某和女子李某某系夫妻,从外省赴筑务工,就想到制作假证获取不义之财。为了扩大“销路”,两人还制作“东南亚证件集团公司”及联系电话的名片,到处投递。
但为了规避公安机关打击,两人在屋里购置充足的食物,白天深居简出,不大外出。但再狡猾的狐狸也会露出破绽来。
图丨西湖路派出所民警抓获嫌疑人
该案查获用于制作假证的印刷品1.2万份,印章387个,同时还查获打印机、制证机多台。
目前,陈某勇、陈某、李某某已被公安机关刑事拘留,案件在进一步办理中。
警方提示
不要相信任何的不学自通、不劳而获。如果有,那制假的这对夫妻早就走上他们人生的巅峰了。
不要拿读书的大事,孩子一生的前途和使用假证的这条“捷径”对赌,既毁了孩子心中家长的形象,又损失了钱财,还影响了孩子的学习。“赔了夫人又折兵”,何苦呢?
希望相关部门把好关,一旦发现伪造证件,要及时报警处理。南明公安将重拳出击,砺锋亮剑,惩治犯罪。
转自:贵阳公安南明分局
来源: 贵阳晚报
*请认真填写需求信息,我们会在24小时内与您取得联系。