JavaScript的几个基础知识
JavaScript是前端开发的基础,下面是本人学习前端过程中觉得容易混淆或者难以区分的一点小小总结。
1.document.documentElement与docuement.body的区别:
document.docuemntElement:是指整个树节点的根节点,返回的是一个文档的文档对象,即<html>标签,如果没有该标签,返回的即为null。
documeny.body:指的是整个树节点中的body子节点,即为<body>标签
2.两个等于号(==)与三个等于号(===)
两个等于号:类似于 '123' == 123;的返回结果,是true,为什么呢,因为左边的字符串会变为数字类型123,之后再与右边的整数123比较,返回的就是true了。
三个等于号(严格等于===):类似于 a===b; 会先判断两边的类型是否相同,如果不同则返回false,如果类型相同再进行一步的比较,如数组[1,2] ===[1,2]跟 new Object() === new Object() 这几个的比较都会返回false,因为对象的比较,是对象引用的比较,而不是对象值的比较,所以都会返回false。
3.string类型与string 对象类型
可能对很多初学的人来说,不知道var str = "123";与 var strobj = new String("123");的区别,
前者是str是一个基本类型(字符串类型),而后者strobj呢,是一个对象类型,而且这个类型是string的一个包装类,如下图所示
4.关于delete与Object.defineProperty
Object.defineProperty()方法会直接在对象上定义一个新的属性或修改属性并返回这个对象。例如
var x = {a:1};
Object.defineProperty(x,'a',{
configurable:false, //当configurable的值为false,delete无法删除对象的属性,反之可以
value:2 //该值为修改对象x的属性a的值 即 x.a=2
})
delete x.a; //返回false
x.a; //输出为2
当用delete删除对象的某个属性时,当configurable为true时,删除成功。当configurable为false时,无法删除。
5.在JavaScript中没有块级作用域。
6.函数中的全局变量跟局部变量
function test(){
var x = y = 1;
//这样确实创建了两个变量a跟b,且a跟b都等于1,但是创建出来的a为局部变量,b隐式是全局变量
}
console.log(x);//输出undefined
console.log(y);//输出1
7.function test(){}与 var test = function (){}的区别
function test (){}:叫做函数对象或者函数声明
var test() = function(){}函数预处理
test();//不会报错 函数声明预处理或者函数前置
function test(){};
test();//报错
var test = function(){}
8.关于 for..in...
使用for...in,它的顺序是不确定的。
受原型链的影响,如果有其它的属性也会显示出来。
以上就是几个关于几个js的基础知识。 学生一枚,正在努力学习中,写得不好或者有写错的,请谅解,欢迎指正交流。