js基本概念

这里主要和大家谈一些不容易注意或者平时没有系统整理过的知识点,经常用但是最总是被忽略的

1.语法

1.区分大小写

js是严格区分大小写的,typeof关键字不能写作typeOf。一个函数可以命名位typeOf但是不能是typeof

2.标识符
  1. 第一个字母必须是_,$或者字母[不能用数字开头]
  2. 别的字符可以是_,$或者字母,数字
3.注释
  1. /* **/多行注释
  2. 单行注释 //
4.严格模式

"use strict"//定义不同的解析执行模式 整个脚本或者function中添加
作用是对某些不安全的操作抛出错误

function doSomeThing(){
  "use strict"
}
5.语句
  1. 一般语句后面加上;,这样能够增加代码性能,但是如果省略了不会出错。
  2. 可以使用{}把多条语句组合成一个代码块。在if等语句中都会使用
6.保留字和关键字

很多有特殊意义的字我们都不能将它设置为变量名。比如:var boolean等

7.变量

js里面的变量都是松散类型的,eg:var a;我们并不能判断a是什么类型的数据。即a可以保存所有类型的数据。当然在没有设置值的时候,a也是有一个初始值的undefined。我们在修改值的同时,也可以修改a保存的类型,但是我们一般不这样做。

!!!注意

  1. 使用var将变量定义在它所在作用域范围内,当它出了这个范围,变量会被销毁。
function test(){
  var msg="你好";
  console.log(msg);//你好
}
  console.log(msg);//错误
  1. 如果没有使用var定义变量,默认会在全局定义变量。
function test(){
  msg="你好";
  console.log(msg);//你好
}
  console.log(msg);//你好
// 注意一般不建议这样  会在严格模式下报错  并且解析有问题
  1. 定义多个变量
var msg="你好", age=18;
//!!!注意var msg="你好"; age=18;相当于age定位全局变量
8.数据类型

简单数据类型:Undefined,Null,String,Number,Boolean
复杂数据类型:Object

9.typeof操作符
  1. 先声明,typeof是操作符,不是函数
  2. 为大家总结一下typeof能够返回的所有值
    function,undefined, string,number,boolean,object
    接下来列举一些特殊的值
typeof a; //undefined
typeof 123; //number
typeof true; //boolean
typeof "123"; //string
typeof function a(){}; //function
typeof [1,2,3]//object
typeof null;//object

在没有es6之前,typeof 是一个绝对安全的操作符;

9.undefined类型
  1. 在声明了变量,但是没有赋值,变量的值默认就是undefined。我们也可以显示的为变量赋值为undefined,但是这样没有意义。
  2. 声明了变量没赋值和没有声明变量是不一样的
var a;
console.log(a);//undefined
console.log(b);//出错

显式的初始化变量是非常有必要的。

  1. 因为在使用没有声明过的变量会出错,但是有一个操作符typeof()在es5的环境下始终安全。返回为undefined。我们经常在声明了变量立马赋值,这样我们可以利用typeof检测变量名是否已经声明过了。为undefined就是未声明过。
10.Null类型
  1. 这里注意typeof(null); //object
  2. 如果我们声明一个变量用于保存对象,但是暂时没有值,我们会赋值为null
  3. null == undefined //true
  4. 不明白,这里的指针不是不一样么?为什么===会是true,注意==和===的区别;
var bb = null;
var cc = null;
bb === cc; //true
11.Boolean类型

只有true和false是布尔值,True和False是标识符
这里主要是介绍一些值转化为bool类型的值。

  1. String里面的空字符串为false
  2. Number里面的0和NaN会转化为false
  3. Object里面的null会转化为false
  4. Undefined里面都转化为false
    这些主要是在if语句中会使用
12.Number类型
  1. 进制表示
    0x16进制 var num = 0xA表示10
    08进制 var num = 010表示8
    0无效8进制 var num = 090表示9因为超出了8进制。八进制字面量在严格模式下是无效的,会导致支持的 JavaScript 引擎抛出错误。
+0 === -0; // true

所有的值计算时都是转化为10进制

  1. float值
    js会尽量把float值转化为正数类型以节约空间。
var num = 1.0; //1
var num1 = 1.; //1
1.0 === 1; //true

js对于极大或者极小的数字采用科学记数法。

var num = 3.125e7;//31250000

js中不要测试小数相加的值。会不精确

var a = 0.1+0.2; //0.30000000000000004

3.数值范围
js里面能够表示的数据的值的范围时有限的,因此,我们在计算的时候可能需要看看数据是否超出计算范围
+-Infinity无法参与下一次运算
// 不能明白为什么能够表示Number.MAX_VALUE + 1
// 不能明白为什么isFinite(Number.MAX_VALUE + 1)//true

//js里面能表示的最大的数值
Number.MAX_VALUE//1.7976931348623157e+308
//js里面能表示的最小的数值
Number.MIN_VALUE//5e-324
//是否在表示范围内
isFinite(Number.MAX_VALUE)//true
isFinite(Number.MAX_VALUE*2)//false
isNaN(Number.MAX_VALUE*2)

4.NaN
这表示一个非数字。我们在转转数值时经常碰到不能转化情况,得到的值就是NaN
注意任何涉及NaN的操作都是返回NaN。

NaN+10;//NaN

注意NaN不等于NaN

NaN == NaN; //false

js提供了isNaN()方法,判断这个字符是不是非数字。注意这里会发生一定的转化,字符串和boolean会尽量转化为数字,这里就提供一些值给大家阅览

isNaN(NaN); // true
isNaN(10); // false
isNaN("10"); // false
isNaN("0x10"); // false
isNaN(false); // false
isNaN("false"); // true,不提供双重转化

注意这个方法也适用于对象,会调用对象的valueof()方法或者toString()方法,再进行响应转化

  1. 数字转化
    这里有三个方法
    Number()1.true转化为1,false转化为0 2.null转化为0 3.undefined转化为NaN4.字符串能识别10进制和16进制。不能进行2次转化。空字符串转化为0
    parseInt()1.字符串的转化会忽略前面的空格,第一个字符必须是符号或者数字,否则值为NaN。知道遇到字符不是数字。2.可以识别10进制,16进制,8进制。3.提供第二个参数,进制。用于识别是什么进制的数据。
    parseFloat()1.会忽略前置0.遇到第二个小数点就会截止。2.只识别10进制的数据。
13.String类型
  1. 可以由"或者'包含。不过以什么开头就以什么结尾。
  2. 转义字符也会被当做一个字符解析。
  3. 可以通过.length属性取得字符串长度。
  4. 字符串一旦被创建,就不能被修改。我们修改字符串其实是这样的过程。1.销毁原来的字符串2.创建能容纳新字符串的对应空间3.字符串填充
  5. toString()方法。1.除了null和undefined没有这个方法,别的都可以进行调用。2.其中数值调用可以传入参数表示转化为多少进制。
  6. string()方法。转化为字符串。可以把任何值转化为字符串。
  7. 转化字符还有一个简便方法+''。也可以转化任意值。
14.Object类型
  1. 创建方式
var o = new Object;
var o1 = {};
  1. obj类型每个实例都有自己的方法和属性
    1.constructor:创建当前对象的函数。
    2.hasOwnProperty():检查给定的属性是否存在于当前的实例。并且该属性不存在于原型中。
function Person(){
  this.eat = function(){
    'i am eating';
  }
}
p.hasOwnProperty('eat')//true
p.constructor;//ƒ Person(){this.eat = function(){'i am eating'}}
p.propertyIsEnumerable('eat');//true
p.toString()//"[object Object]"
p.toLocaleString()//"[object Object]"

3.isPrototypeOf():检查传入对象是否是当前对象的原型。
4.propertyIsEnumerable():属性是否可以列举。
5.toString()和toLocalString(),valueOf()此处不一一详解了。

15.操作符

1.一元操作符
++    --   +    -
1.这里将一元操作符分为前置性和后置性。具体区别可以自己进行查阅,不做过多讲解。
2.但是有一点需要注意它会把字符串尽量转换为数字,应用方法是Number();不能转化是指为NaN;注意Number(false)=0; Number(true)=1
3.至于对象会调用对象的valueof方法,然后再进行运算。
2.位操作符
这里不做过多讲解。想要了解的同学可以通过源码,反码,补码等进行了解。注意:按位与或非、左移、右移 是的数字是按位操作运算
3.布尔操作符
逻辑与或非也是布尔操作符 && || !
1.注意&&,第一个为假,不运算第二个。第一个为真会返回第二个值
2.注意||,第一个为真,不运算第二个。第一个为假会返回第二个值
3.!的话注意一些比较特殊的值即可
3.乘性操作符
注意于NaN和Infinity的特殊运算即可
4.加性操作符
1.注意于NaN和Infinity和+-0的特殊运算
2.+ 有字符串连接作用和数字相加。但是只要相加的项中有字符串,则为字符串拼接。除非用()进行隔离运算。
3.- 则相反,会尽量把所有项,转换为数字进行运算'3'-'2' //1
5.关系运算符
< > >= <=
只要里面有一个是数字,则转化为数字进行比较。别的为ASCII码比较。如果不能转化则返回false
6.相等操作符
== === != !===
1. == 会尽量进行转化。===不会进行转化
7.条件操作符
条件?执行true的时候值:执行false时候的值。
8.赋值运算发
+= -= *= /=
eg: a += 2;//a = a+2
9.逗号操作符
1.一个语句执行多个操作var a=1,b=2,c=3
2.赋值是记住最后一个值var a = (1,2,3,4) //a=4

16.语句

1.条件语句if(),switch(){case :}
2.循环语句while(){},do{}while(),for(),!!!for(... in ...):枚举对象属性
3.其他语句break,continue,with,label

17.函数

1.函数以及return

function 函数名(){  
//函数体;
//return 可以用于返回值 但是她执行后会退出函数;   
//直接写return   返回的是undefined值
}

2.函数参数
函数体中永远不会介意你传递进来的参数类型和参数的个数,因为,!!!参数在函数内部是用一个数组表示的,由arguments对象来记录表示。它类似数组但是不是数组。arguments的值和变量的名字和值是相对应的,arguments值改变,变量的值改变。命名参数只是提供便利,但不是必须的。
3.函数没有重载。
js中函数没有重载,定义了相同名称的函数,后面的函数会覆盖前面的函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • 本章内容 语法 数据类型 流控制语句 理解函数 3.1 语法 3.1.1 区分大小写 区分大小写 3.1.2 标识...
    闷油瓶小张阅读 715评论 0 0
  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,790评论 0 1
  • 概念 1、CSS和JS在网页上的放置顺序是怎样的? 将CSS放在head标签中:CSS放在后面会造成白屏或者FOU...
    周花花啊阅读 437评论 1 1
  • 第三章 基本概念 本章基本内容 语法 数据类型 流控制语句 理解函数 (一)语法 区分大小写在JS里面变量,函数名...
    我拥抱着我的未来阅读 441评论 0 0