js部分知识梳理

本文深入讲解JavaScript中的真假值判断、数组方法、日期处理、运算符、面向对象编程、ES6特性、函数声明与变量提升等核心概念。通过具体示例,帮助读者掌握JS的高级用法,提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写这个的原因是,无意间发觉之前学习的东西不够深入,写的代码很冗余,就觉得应该温故知新,多看看,所以这里想把平常忽略的一些知识集中起来归档一下
eg:
var aa = ‘xxx’;
原来写if(aa!=null && aa !=undefined){}后面才知道直接写if(aa){}就可以了,所以感觉还是要多看书多梳理。。。。。。。。。。。但是这里提醒一个,如果是做一个数字的验证我觉得直接写应该是有问题的,0

一、深入理解if的使用方法

Truthy 不等于ture,他是指是在Boolean上下文中转换后的值为真的值。可以理解是,在javascript中所有表达式为 true 的值。同理Falsy指的是在javascript中所有***表达式为false***的值。

eg:if(Truthy ){}

if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
if…else if…else 语句 - 使用该语句来选择多个代码块之一来执行
switch 语句 - 使用该语句来选择多个代码块之一来执行

二、js中的假值

二、Falsy
JavaScript 中 falsy 值的例子如下 (将 falsy 值转换为`false):

在这里插入图片描述

三、new Date()兼容性问题
ie11 有‘-’的时候是不能识别的,所以在ie的时候应该使用‘/’
在这里插入图片描述

谷歌

在这里插入图片描述

火狐版本62.0 (64 位) 显示的是utc的时间 utc+8个小时时差=北京当地时间
const date = new Date(+new Date() + 8 * 3600 * 1000);
UTC+时区差=本地时间
在这里插入图片描述

四、js || && 等运算符操作
首先贴一个优先级
在这里插入图片描述
结合上面的js假值进行判断

a || b
1、只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。

2、只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值

a &&b
1、只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

2、只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

五、关于array 数组的js各种方法和操作
pop shift unshift push
在这里插入图片描述

array.map

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

注意: map() 不会对空数组进行检测。

注意: map() 不会改变原始数组。

array.some

定义和用法
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。

some() 方法会依次执行数组的每个元素:

如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测。

注意: some() 不会改变原始数组。

array.every

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。

every() 方法使用指定函数检测数组中的所有元素:

如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测。

注意: every() 不会改变原始数组。
在这里插入图片描述

array.foreach

遍历数组
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

注意: forEach() 对于空数组是不会执行回调函数的。

array.filter

检测数值元素,并返回符合条件所有元素的数组。
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组。

array.toString()

把数组转换为字符串,并返回结果。

JSON.stringify(array)

直接将整个数组转化为字符串
 
在这里插入图片描述

JavaScript 数组有什么特殊之处,而是因为在 JavaScript 中,以数字开头的属性不能用点号引用,必须用方括号。比如,如果一个对象有一个名为 3d 的属性,那么只能用方括号来引用它。下面是具体的例子:

var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
console.log(years.0); // 语法错误
console.log(years[0]); // √

六:typeof 返回值问题

typeof (typeof 1) === ‘string’; // typeof总是返回一个字符串

在这里插入图片描述

使用 new 操作符节

// All constructor functions while instantiated with ‘new’ keyword will always be typeof ‘object’
var str = new String(‘String’);
var num = new Number(100);

typeof str; // It will return ‘object’
typeof num; // It will return ‘object’

// But there is a exception in case of Function constructor of Javascript

var func = new Function();

typeof func; // It will return ‘function’

IE 特别提示节

在IE 6,7和8上,很多宿主对象是对象而不是函数。例如:

typeof alert === ‘object’

七:js中和es6相关的操作

多行字符串
由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ... 表示:
在这里插入图片描述
在这里插入图片描述
js原生的时候是用“+”进行变量拼接同时使用引号进行字符串的接收和使用
es6实现将变量拼接使用${}装变量同时字符串使用 ... 反引号包裹

八、js函数声明和函数表达式的区别

1、函数声明必须带有标识符(函数名称),函数表达式则可以省略

表达式里的名字不能在函数外面用,只能在函数内部用
函数有一个name属性,指向紧跟在function关键字之后的那个函数名。如果函数表达式没有名字,那	name属性指向变量名

2、函数声明会被预解析,函数表达式不会

自执行函数也叫立即调用的函数表达式(IIFE)
函数声明不能直接调用的原因
小括号里只能放表达式,不能放语句
function关键字即可以当作语句,也可以当作表达式。但js规定function关键字出现在行首,一律解释成语句
解决方法:不要让function出现在行首

用括号把function主体括起来,转成表达式。后面加括号运行
借助运算符(new + - ! ~ typeof , && ||…)
因为运算符会把表达式执行,执行后得出结果了才能运算

只要把函数声明转成表达式,再加上括号就可以声明。那就有很多稀奇古怪的方式来执行函数

九、js面向对象思维

概念:ECMA-262 把对象定义为:无序属性的集合,器属性可以包含基本值、对象或者函数。
Object.defineProperty 有兼容性,只适合在ie8及以上使用 当个创建
数据属性
实例:var person = {}
Object.defineProperty(person,‘name’,{
writable:false,
value:‘lucky’
})
Object.defineProperty(对象,属性名称,一个描述符对象(属性是否只读Writable,Value值是什么))
也可以直接使用get,set实现对已有属性的接收和修改 (访问器属性)
Object.defineProperty(person,‘name’,{
get:function(){
retrun this.name
},
set:function(newValue){
this.name =newValue
}
})
Object.definepropertIes 针对多个属性同时定义和修改
Object.definepropertIes(对象,{
多个属性同时赋值等,或者使用get,set重新获取或者设置这个值
})
创建对象值几种模式

1、工厂模式
相当于创建一个总的方法,在里面调用new Object 创建一个实例,添加属性方法等,让后返回这个方法
缺点:不能分辨出是属于那种类型的函数

eg: function createPerson(name,age){
     var eg = new Object();
     eg.name = name;
     eg.age = age;
     return eg
}
var person1 = createPerson('lily',20);

2、构造函数模式
使用new 关键字构造一个新函数
缺点:里面的方法中名称是同一个,但每创建一个,内部方法也创建一个,不同实例上的同名函数是不相等的。

function  Person(name,age){
     this.name = name;
     this.age = age;
     this.ChangeName = function(){
       console.log(this.name)
     }
}

var person1 = new Person(‘lucy’,20)
//注意事项 函数名第一个字母大写
作用域更改为当前的作用域
使用instanceof 基础的形式person1继承了Person的左右属性和方法---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3、原型模式

定义一个函数 然后通过protoype 定义对象的方法和属性,直接在原生链中定义。使其方法和对象都保证是使用的一个对象上的东西

缺点: 就是其属性如果是引用类型的时候更改新创建的对象时,原对象的原生链也会跟着更改

4、组合使用构造函数模式和原型模式
属性 使用this 的形式 使用new 创建对象

但是方法使用prototype的形式实现

九、函数声明和变量提升 和同名问题

1、函数声明优先变量声明
2、函数声明提升是刚开始的时候就直接读取到了函数和函数的值,但是变量是先读取声明再第二步赋值的位置才会读取值

console.log(test())   //123
function test(){
console.log('123')
}
console.log(test)
//ƒ test(){
//console.log('123')
//}
var test = 2;
console.log(test)  //2  

3、当函数声明和变量声明同名的时候 js实行执行顺序由上到下,赋值由内到外的规律。
当声明后函数声明优于变量,所以上面第一个是函数test先什么并且赋值执行 。然后var test;
声明,这里声明不起作用。后面test=2过后相当于在给之前函数的test赋值 直接就变为了2




参考:[https://blog.youkuaiyun.com/FE_dev/article/details/68943341](https://blog.youkuaiyun.com/FE_dev/article/details/68943341)

摘自:《JavaScript高级程序设计》
				  
参考文献:[https://blog.youkuaiyun.com/she_lock/article/details/80929613](https://blog.youkuaiyun.com/she_lock/article/details/80929613)
                    [https://www.cnblogs.com/renbo/p/8098962.html](https://www.cnblogs.com/renbo/p/8098962.html)
                    [https://blog.youkuaiyun.com/thlzjfefe/article/details/84403349](https://blog.youkuaiyun.com/thlzjfefe/article/details/84403349)
                    [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array)
                    [https://segmentfault.com/a/1190000016496022](https://segmentfault.com/a/1190000016496022)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值