javascript基础重点

1.在javascript中使用 == 比较,会自动转换数据类型再比较,有时候会 得到非常诡异的结果;一般情况下使用 === 比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较

2.特殊的Number  NaN 与所有其他值都不相等,包括自己。  唯一判断NaN方法是通过 isNaN()函数

3.浮点数相比较(因为浮点数在运算过程中会产生误差,极端及不能精确表示无限不循环小数。要比较两个浮点数是否相等,只能计算它们之间的差的绝对值,看是否小于某个阈值)

例:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

 4.null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。undefined表示值未定义。区别两者的意义不大,大多数情况下,我们都应该用nullundefined仅仅在判断函数参数是否传递的情况下有用。

5.对象

var xiaohong = {
    name: '小红',
    'middle-school': 'No.1 Middle School'
};

xiaohong的属性名middle-school不是一个有效的变量,就需要用''括起来。访问这个属性也无法使用.操作符,必须用['xxx']来访问:

xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小红'
xiaohong.name; // '小红'

6.

使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。以Array为例:

var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身
    alert(element);
});

7.调用函数的时候,传入参数多的情况下没有问题

传入参数少的时候,没传但用到的参数就会收到 undefined,计算结果为NaN

如果要避免收到undefined可以对参数进行检查:

function abs(x) {
    if (typeof x !== 'number') {
        throw 'Not a number';
    }
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

8.注意return语句

function foo() {
    return { name: 'foo' };
}

foo(); // { name: 'foo' }

如果把return语句拆成两行:

function foo() {
    return
        { name: 'foo' };
}

foo(); // undefined

要小心了,由于JavaScript引擎在行末自动添加分号的机制,上面的代码实际上变成了:

function foo() {
    return; // 自动添加了分号,相当于return undefined;
        { name: 'foo' }; // 这行语句已经没法执行到了
}

所以正确的多行写法是:

function foo() {
    return { // 这里不会自动加分号,因为{表示语句尚未结束
        name: 'foo'
    };
}

9.

javascript的函数可以嵌套,内部的函数可以访问外部的函数定义的变量,反之不行

如果内部函数和外部函数的变量重名的话,javascript的函数在查找变量时从自身函数定义开始,从内向外查找,如果内部函数定义了与外部函数重名的变量,则内部函数的变量将屏蔽外部函数的变量

10.javascript会扫描整个函数体的语句,把所有声明的变量提升到函数顶部,但不会提升变量的赋值

11.

Array的sort()方法默认把所有的元素先转换为String 再排序

[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
'10'排在'2'的前面,因为'1'比字符'2'的ASCII码小

sort()方法会直接对Array进行修改,返回的结果是当前的Array

12.typeof操作符获取对象的类型

13.包装对象,使用new创建

var n = new Number(123); // 123,生成了新的包装类型
var b = new Boolean(true); // true,生成了新的包装类型
var s = new String('str'); // 'str',生成了新的包装类型

 14.

var n = Number('123'); // 123,相当于parseInt()或parseFloat()
typeof n; // 'number'

var b = Boolean('true'); // true
typeof b; // 'boolean'

var b2 = Boolean('false'); // true! 'false'字符串转换结果为true!因为它是非空字符串!
var b3 = Boolean(''); // false

var s = String(123.45); // '123.45'
typeof s; // 'string'

 15.

  • 判断Array要使用Array.isArray(arr)
  • 判断null请使用myVar === null
  • 判断某个全局变量是否存在用typeof window.myVar === 'undefined'
  • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'
  • 123..toString(); // '123', 注意是两个点! (123).toString(); // '123'

 16.为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""

17.将对象序列化成JSON格式的字符串

var xiaoming = {
    name: '小明',
    age: 14,
    gender: true,
    height: 1.65,
    grade: null,
    'middle-school': '\"W3C\" Middle School',
    skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};

JSON.stringify(xiaoming); 
// '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'

JSON.stringify(xiaoming,null,' ');

第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array

JSON.stringify(xiaoming, ['name', 'skills'], '  ');

还可以传入一个函数,这样对象的每个键值对都会被函数先处理:

function convert(key, value) {
    if (typeof value === 'string') {
        return value.toUpperCase();
    }
    return value;
}

JSON.stringify(xiaoming, convert, '  ');

18.使用JSON.parse()将JSON格式的字符串变成一个Javascript对象

JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45

JSON.parse()还可以接收一个函数,用来转换解析出的属性:

JSON.parse('{"name":"小明","age":14}', function (key, value) {
    // 把number * 2:
    if (key === 'name') {
        return value + '同学';
    }
    return value;
}); // Object {name: '小明同学', age: 14}

19.

javascript中ajax的使用

'use strict';

function success(text) { var textarea = document.getElementById('test-response-text'); textarea.value = text; }

function fail(code) { var textarea = document.getElementById('test-response-text'); textarea.value = 'Error code: ' + code; }

var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象

request.onreadystatechange = function () { // 状态发生变化时,函数被回调 if (request.readyState === 4) { // 成功完成 // 判断响应结果: if (request.status === 200) { // 成功,通过responseText拿到响应的文本: return success(request.responseText); } else { // 失败,根据响应码判断失败原因: return fail(request.status); } } else { // HTTP请求还在继续... } }

// 发送请求: request.open('GET', '/api/categories'); request.send();

alert('请求已发送,请等待响应...');

 20.AJAX和Promise看不太懂

21.

Canvas除了能绘制基本的形状和文本,还可以实现动画、缩放、各种滤镜和像素转换等高级操作。如果要实现非常复杂的操作,考虑以下优化方案:

  • 通过创建一个不可见的Canvas来绘图,然后将最终绘制结果复制到页面的可见Canvas中;
  • 尽量使用整数坐标而不是浮点数;
  • 可以创建多个重叠的Canvas绘制不同的层,而不是在一个Canvas中绘制非常复杂的图;
  • 背景图片如果不变可以直接用<img>标签并放到最底层

 22.

事件的触发总是用户操作引发的,如果用代码去通过改变一些东西意图去触发事件,这是达不到目的的

23.在浏览器中有些javascript代码只有在用户触发下才能执行,例如 window.open()

24.Jquery有的动画如 slideUp()没有效果,这是因为jquery动画的原理是逐渐改变css的值,如:height从100px逐渐变为0,如果元素不是block性质的DOM元素,设置它们的height就不会起作用

25.涉及到异步代码,无法在掉用时捕获异常,原因是在绑定事件的代码处,无法捕获事件处理函数的错误

26.underscore函数库

 node.js

27.

如果要输出一个键值对象{},可以利用exports这个已存在的空对象{},并继续在上面添加新的键值;

如果要输出一个函数或数组,必须直接对module.exports对象赋值。

 28.process.nextTick(function(){}); //传入的函数不是立即执行,要等到下一次事件循环

Node.js进程本身的事件就由process对象来处理。如果我们响应exit事件,就可以在程序即将退出时执行某个回调函数:

// 程序即将退出时的回调函数:
process.on('exit', function (code) {
    console.log('about to exit with code: ' + code);
});

29.判断javascript执行环境

if (typeof(window) === 'undefined') {
    console.log('node.js');
} else {
    console.log('browser');
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王磊的博客

vuejs深入浅出—基础篇

一、从HelloWorld说起 任何语言的都是从Hello World开始的,VueJs也不例外,直接上代码: <script src="https://unp...

3226
来自专栏TungHsu

这或许是对小白最友好的python入门了吧——12,列表深入体验

有些时候我们不需要整个列表元素,只需要其中一段列表就好了,我们应该怎么办呢? 这个叫做列表切片。 exam = ["cet","english","math",...

2885
来自专栏IMWeb前端团队

20个例子入门Q.js

本文希望通过20个简单的例子让没用过Q.js的同学快速掌握其基本用法 1. 新建实例 html代码: <div id="demo" q-text="msg"><...

2347
来自专栏张善友的专栏

深入浅出事件流处理NEsper(二)

NEsper使用的事件类型来描述事件的类型信息。你的应用在启动时可能预先配置定义事件类型,或者在运行时通过API或EPL语法动态的增加事件类型。 EPL中的cr...

19910
来自专栏LEo的网络日志

go语言接口学习

3625
来自专栏全沾开发(huā)

学习zepto.js(Hello World)

学习zepto.js(Hello World) Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery...

4498
来自专栏Python爬虫实战

Python数据类型之字符串

字符串就是一系列的字符。Python中,用配对的引号括起来的都是字符串,其中引号可以是单引号也可以是双引号:

862
来自专栏Golang语言社区

Go 语言简介(上)— 语法

Hello World package main //声明本文件的package名 import "fmt" //import语言的fmt库——用于输出 f...

3978
来自专栏大前端_Web

SASS相关

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1881
来自专栏大数据学习笔记

Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.4 数据类型和存储格式)(草稿)

第11章 Hive:SQL on Hadoop 11.4 数据类型和存储格式 11.4.1 数据类型 (1)基本类型 Hive 支持关系型数据中大多数基本数...

1949

扫码关注云+社区

领取腾讯云代金券