javascript基础知识总结
javaScript基础知识总结
不涉及闭包、原型链、面向对象等
JS的组成
- DOM: Document Obejct Model 文档对象模型 提供了一整套操作页面元素的API
- BOM: Browser Object Model 浏览器对象模型 提供了一整套操作浏览器相关信息的API
- ECMAScript JS的语言标准规范
JS中的数据类型
基本数据类型
- string
- numeber
- boolean
引用数据类型
- Object
- function
- Array
- Data
- Math
- String
- Number
- Boolean
- RegExp
空数据类型
- null
- undefined
//注意: null == undefined 会返回true
获取数据类型的方式
typeof 数据 返回字符串类型
instanceof 某对象 返回true 或 false
Object.prototype.toString.call(obj) 返回对象类型
- 使用typeof获取到除了function之外的所有的引用类型的数据的类型都是object
2。 使用typeof获取null的数据类型,获取到的是object
in关键字
for-in 遍历对象的属性
for(var k in obj){
console.log k; //获取对象属性
console.log obj[key] //获取对象属性值
}
属性名 in 对象
判断对象能否访问某个属性 返回值为布尔值;
delete关键字
删除没有使用var声明的变量
a = 10;
console.log(delete a);
// 会报错删除对象的属性
var obj = {
obj.name = 'jack',
obj.age = '18'
}
delete obj.name;
console.log(obj);
逻辑中断
||中断
表达式1 || 表达式2
如果表达式1为真,则返回表达式1,否则返回表达式2
&&中断
表达式1 && 表达式2
如果表达式1为假,则返回表达式1,否则返回表达式2
break continue
- break跳出整个循环,继续执行循环之后的代码
- continue跳出本次循环,继续下次循环
对象的动态特性
在对象创建完成之后,可以随时的为对象新增成员,这样的特性是动态特性
点语法
js 对象名.属性名 = 值
2.关联数组语法对象名[属性名] = 值
值类型和引用类型
值类型
直接存储数据本身的的数据就是值类型的数据
引用类型
存储的是数据的地址,数据单独存储起来的数据就是 引用类型的数据
值类型的赋值特征
直接将存储的数据复制一份交给新的变量,两个变量值相同,但是存储空间不同,相互独立,互不影响
引用类型的复制特征
直接将数据的地址复制一份交给新的变量,两个bianl指向同一个对象,修改其中一个,另外一个也会受到影响
异常处理
try{
可能会出错的代码
}catch(e){
出后的处理代码
//e 异常信息
}finally{
//无论是否出错都会执行的代码
//一般用来做释放资源的操作
}
手动抛出异常的语句 throw
throw anything (anything可以是任何类型的数据)
// throw出去的东西就是被catch捕获的 通过参数e传给我们
浅拷贝和深拷贝
浅拷贝
var obj = {
name : "jack",
age : 18,
car : {
car : "大黄蜂"
}
}
var obj1 = {}
for (var k in obj) {
obj1[k] = obj[k]
}
/* * * 经过对象遍历赋值后,obj1的第一层键值对完全和obj的键值对相等,但是obj1中的car和obj中的car指向的是同一个对象,修改obj1中的car对象的值,对应的obj中的car对象的值也会改变 这就是浅拷贝 */
深拷贝
var obj = {
name : "jack",
age : 18,
car : {
car : "大黄蜂"
}
}
var obj1 = JSON.parse(JSON.toStringify(obj));
//上面大概的实现原理是 先将obj里的数据全部转换成字符串,然后再通过parse方法转换成对象,此时obj中的car对象也会被重新创建一份,
// 所以obj中的car 和obj1中的car不再是指向同一个car ,这时修改其中一个,另一个也不会发生变化,这时深拷贝
分享一些面试题
数据类型测试
判断代码输出结果
var test = 2;
console.log(“test is a Number—“ + (test.constructor == Number));
function test1() { };
var t1 = new test1();
var test2 = “37degree”;console.info(“typeof test—“ + typeof test);
console.info(“typeof test1—“ + typeof test1);
console.info(“typeof t1—“ + typeof t1);
console.info(“t1 instanceof test1—“ + (t1 instanceof Object));
console.info(“test instanceof Array—“ + (test instanceof Array));
参考答案
test is a Number -- true
typeof test -- number
typeof test1 -- function typeof t1 -- object t1 instanceof test1 -- true test instanceof Array -- false
分析:
首先涉及到 JS 预解析的概念,这里的 变量申明 和 函数申明 都会被预解析处理,知道这个以后,那么下面一个一个来分析:
第一个:
因为 test = 2 先执行了,所以这里 test 的值已经是一个数字了,那么 test.constructr 就是 Number,所以下面这个打印 true;
console.log("test is a Number--" + (test.constructr == Number))
第二个:
原因同上,需要注意 typeof 得到的结果 number 的 n 是小写的!
第三个:
test1 是一个函数,typeof 值为 function; 第四个: 通过 new 得到的结果一定是一个 Object,所以 t1 的 typeof 结果为 object; 第五个: 这个题有点误导人的,首先出题人写的是 instanceof test1,但真正计算的却是 instanceof Object,请注意它们的差异!不过不影响结果的,结果都是 true; 第六个: test 是一个数字,所以他的构造函数应是 Number,而不是 Array,所以结果为 false;
请写出以下运算结果:
alert(typeof null);
alert(typeof undefined);
alert(typeof NaN);
alert(NaN == undefined);
alert(NaN == NaN);
var str = “123abc”;
alert(typeof str++);
alert(str);
它们输出的结果依次是:
alert(typeof null); // object
alert(typeof undefined); // undefined
alert(typeof NaN); // number
alert(NaN == undefined); // false
alert(NaN == NaN); // false
var str = "123abc";
alert(typeof str++); // number
alert(str); // NaN
还没有评论,来说两句吧...