4. 运算符和表达式

4.3 赋值运算符和表达式

1.赋值运算符 =
作用:赋值运算符就是将右边的内容赋值给左边的变量或属性。
var result = 1 + 2; 2.复合赋值运算符 +=,-=,*=,/=
var x = 0;
var y = 1;
x += y; //等价于 x = x + y;
console.log(x);

4.4 条件运算符和表达式

条件运算符 条件表达式的结果一定是布尔值
var a = 10;
var b = 15;
1. > 大于 < 小于
console.log(a > b);
console.log(a < b); 2. >= 大于等于 <= 小于等于
console.log(a >= b);
console.log(a <= b); 3. == 等于 != 不等于
== 双等于会进行类型的隐式转换,比较两者是否相等
a = 10;
b = '10';
console.log(a == b); //true
console.log(a != b); //false 4. === 全等于 !== 不全等于
全等于会先判断两者的数据类型,不相同则直接返回false,否则继续比较是否一致
console.log(a === b); //false
console.log(a !== b); //true

4.5 逻辑运算符和表达式

①.逻辑运算符一般情况(逻辑运算符两边都是条件表达式)

逻辑运算符
1. && 表示并且 全真为真,一假则假
2. || 表示或者 全假则假,一真则真
3. ! 取反(true变false false变true) var height = 180;
var weight = 70;
// 全真
console.log(height > 175 && weight < 80);//true
weight = 81;
// 一假
console.log(height > 175 && weight < 80);//false // 一假
console.log(height > 175 || weight < 80);//true
// 全假
height = 174;
console.log(height > 175 || weight < 80);//false

②.逻辑运算符特殊情况(逻辑运算符两边有一边不是条件表达式)

逻辑运算符的特殊情况:逻辑运算符两边有一边不是条件表达式

    1. && 前面为真,结果为后面的值
前面为假,直接返回前面的值,后面的表达式不执行
2. || 前面为真,直接返回前面的值,后面的表达式不执行
前面为假,结果为后面的值
3. 注意点:值本身作为返回结果,不是值隐式转化的布尔值 var a = 0;
var b = 10;
// 对于数字而言,0和NaN隐式转换成false,其他为true
console.log(a && ++b); //0
console.log(a || ++b); //11 var c = '';
var d = 'df';
// 对于字符串而言,空串是false,其他为true
console.log(c && d); //''
console.log(c || d); //'df'

③.逻辑非

  // ! 非,表示取反
// !就是将后面的布尔值值取反,不是布尔值的隐式转换成布尔值取反
console.log(!true); //false
console.log(!false); //true
console.log(!0); // true
console.log(!NaN); //true
console.log(!5); //false
console.log(!''); //true
console.log(!'df'); //false
console.log(!' '); //false

4.6 三元运算符和表达式

1. 一元运算符  ++ -- !
2. 二元运算符 + - * / % && || =(赋值运算符的优先级很低)
3. 三元运算符 flag ? x : y
说明:flag 为真,执行x;flag 为假,执行y var a = 10;
var b = 20;
console.log(a > b ? a++ : b++); // 20 b=21 b = 20;
console.log('' ? a++ : b++);// 20 b=21 b = 20;
console.log(325 ? a++ : b++); //10 a=11

4.7 一元加法(值转换成数字)

当一个值前面出现 '+' ,代表将这个值转化成数字,转化失败返回NaN
console.log(+'45'); //45

4.8 运算符优先级问题

// 运算符的优先级问题
// 乘除优先
var a = 1;
var b = 2;
console.log(a + b * 3); // 7 // 自增自减优先级较高
var c = 3;
var d = 4;
console.log(c + d++); //7 // 同优先级的运算符自左向右依次执行
var e = 5;
var f = 6;
var g = 7;
console.log(e + f - g); //4

5. 数据类型转化

5.1 数据类型的强制转换

①.其他类型转数字 Number()

1 字符串转数字
var num = 'abc123'; //NaN(not a number):表示这不是一个数字,是一种类型
num = '123456'; //123456
num = ' 123456'; //123456
num = '123456 '; //123456
num = '123 456'; //NaN
num = ''; //0
num = ' '; //0
Number(num) 2 布尔值转数字
num = true; //1
num = false; //0
Number(num) 3 undefined转数字
num = undefined; // NaN
Number(num) 4 null转数字
num = null; //0
Number(num)

总结:

字符串转数字:当一个字符串整体是一个数字时,可以直接转化出来,可以忽略字符串左右的空白,中间有空白不可以
当一个字符串为空串或者空白串时,转出来都是数字0
剩余情况下字符串都转化成 NaN
布尔值转数字:true时转为1,false时转为0
undefined转数字:NaN
null转数字:0

②.其他类型转字符串String()

无论什么数据类型转字符串,就是加上引号即可

③.其他类型转布尔值Boolean()

1 数字转布尔值
var flag = 1; //true
flag = 3; //true
flag = -0.5; //true
flag = 0; //false
flag = NaN; //false
Boolean(flag) 2 字符串转布尔值
flag = "haha123"; //true
flag = ' '; //true
flag = '0'; //true
flag = ''; //false
Boolean(flag) 3 undefined转布尔值
flag = undefined; // false
Boolean(flag) 4 null转布尔值
flag = null; // false
Boolean(flag)

总结

数字转布尔值:除了0和NaN都是true
字符串转布尔值:除了空串其他都是true
undefined转布尔值:false
null转布尔值:false

5.2 数据类型的隐式转换

①.隐式转换发生在:数据的运算,比较,判等中

②.数据的判等 ==

1.先看两边是不是同一种数据类型,如果是,看值是否一致
2.如果不是,则两边同时转换成数字
console.log(10 == 11); // false
console.log('10' == 10); //true
console.log(1 == true); //true
3.判等的特殊情况
// 判等的特殊情况:null
// null 与 0 不同
console.log(null == 0); // false
// null 与 '' 不同
console.log(null == ''); //false
// null 与 false 不同
console.log(null == false); //false
// null 与 undefined 相同
console.log(null == undefined); //true
// null 与 null 相同
console.log(null == null);//true

③.数据之间的运算和比较

1.数据的运算和比较正常都是转成数字
2.特殊情况:
①.+号左右存在字符串,就是拼接字符串
②.如果比较运算符左右都是字符串,比较的是ascll码的大小

④.NaN的特殊性

1.NaN与任何值判等都是不等
2.NaN与任何值比较大小,结果都是false
3.NaN与任何值运算,结果都是NaN,除了与字符串拼接
console.log(NaN == NaN); //false
console.log(NaN > 5); //false
console.log(NaN < 5); //false
console.log(NaN + NaN); //NaN
console.log(NaN + 'hello'); //NaNhello

5.3 字符串当中提取数字

①.语法

 parseInt() 只取整数部分
parseFloat() 不光要整数部分还要小数部分

②.要求

1.数字必须在字符串前面
2.可以处理前面的空格,无法处理中间的空格
    var str = '';
str = 'aa123'; //NaN
str = ' 123.9'; // 123 123.9
str = ' 123. 9 ' //123 123
console.log(parseInt(str));
console.log(parseFloat(str));

③.应用范围

1.可以用于字符串取数字
2.可以用作小数取整

5.4 js常见的错误

console.log(b)
// ReferenceError: b is not defined 引用错误 b这个变量没有定义 console.log(‘’)
// SyntaxError: Invalid or unexpected token 语法错误 出现了非法的或者是不认识符号或者标识符
// 会有一个检查你代码语法的过程 如果不通过 一行代码都执行不了 a()
// TypeError: a is not a function 类型错误 a不是一个函数
// 错误的把一个变量当作函数来用了

(二).JavaScript的运算符和表达式,数据类型转化的更多相关文章

  1. Javascript基础--运算符与表达式

    一.运算符 1.运算符分类: 按功能:算术运算符:+.-.*./.%.++.-- 例:12+12-11+5*6+20/5+5%2+(5%-2)+(-5++2)+(a++)+(++a)+(--a)+(a ...

  2. javascript运算符与表达式

    表达式 表达式是关键字.运算符.变量以及文字的组合,用来生成字符串.数字或对象.一个表达式可以完成计算.处理字符.调用函数.或者验证数据等操作. 表达式的值是表达式运算的结果,常量表达式的值就是常量本 ...

  3. 01-Java基础知识:数据类型与变量、标识符、运算符、表达式

    Java基础知识:数据类型与变量.标识符.运算符.表达式 一.数据类型 Java定义了基本数据类型.引用数据类型.自定义类型. 八种基本数据类型:byte (1). short (2).  int ( ...

  4. 【JavaScript运算符与表达式】

    一.表达式 1.原始表达式:2.14,"test",true/false,null--复合表达式:10*20-- 2.数组.对象的初始化表达式:new Array(1,2),[1, ...

  5. C语言复习————基本数据类型、运算符和表达式

    数据类型/运算符/表达式 主要分两部分介绍,第一部分介绍常用的数据类型,例如:常量和变量/整型/实型/字符型:第二部分介绍算数运算符和算数表达式以及赋值运算符和逗号运算符. 一. 常用的数据类型 1. ...

  6. Objective-C中的数据类型、常量、变量、运算符与表达式

    1.Objective-C中的数据类型: Objective-C中的基本数据类型有:int.char(-128-127).float.double.BOOL,Byte(0-255) Id类型相当于(等 ...

  7. JS基础-数据类型-运算符和表达式-变量和常量

    1.js的基础语法2.js调试 1.F12调出控制台,查看提示错误及其位置. 2.出错时只影响当前代码块,不会影响其他代码块,后续代码块继续执行.3.语法规范 1.js语句:可执行的最小单元 必须以 ...

  8. JavaScript语法详解:运算符和表达式

    本文首发于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 我们在上一篇文章里讲到了JS中变量的概念,本篇文章讲一下运算符和表达式. 比 ...

  9. c的详细学习(2)数据类型,运算符与表达式

        本节用来介绍c语言中的数据类型和运算符.     (1)c语言的基本符号:       任何一种基本语言都有自己的基本词汇表.c语言的基本词汇表有一下几部分: *数字10个: *英文字母:大小 ...

  10. 前端学习笔记--js概述与基础语法、变量、数据类型、运算符与表达式

    本篇记录js的概述与基础语法.变量.数据类型.运算符与表达式 1.概述与基础语法 2.变量 举例: 3.数据类型 4.运算符与表达式

随机推荐

  1. 防止react-re-render: Why Suspense and how ?

    近期内部项目基础项目依赖升级,之前使用的路由缓存不再适用,需要一个适配方案.而在此过程中react re-render算是困扰了笔者很久.后来通过多方资料查找使用了freeze解决了此问题.本文主要论 ...

  2. C++之split字符串分割

    在C++中没有直接对应的split函数,字符串分割可借助以下方法实现: 1.借助strtok函数 函数原型:char * strtok (char *str, char * delim); 函数功能: ...

  3. 不符合Json格式都能被Gson 转成对象使用!!!

    问题描述: 在与前端测试的时候,前端下发商品档案,结构为{""items":[{A对象},{B对象},{C对象}]},他下发了504条数据,但我们插入数据库的时候 只有1 ...

  4. linux改变用户属主

    将test文件的属主改为root:sudo chown root test 改变所在组:sudo chgrp root test 同时改变属主和所在组:sudo chown root.root tes ...

  5. IntelliJ IDEA 工具识别不了 过大Java文件 引用识别的不了的文件报错

    之前出现过proto 生成的文件过大 idea 识别不了 引用消息报错. 解决方案 1.找到IntelliJ IDEA 桌面快捷键图标 右键属性 2.打开文件位置,找到所在目录 3.找到idea.pr ...

  6. mybatis查询sql时,在不分页的情况下,自动加了limit导致接口报错

    今天在开发过程中,我遇到了很奇怪的问题.自己写的代码明明没有分页进行查询,但是打印出来的sql缺有limit 导致我getone的时候,出现了二个limit,导致接口报错. ### Cause: or ...

  7. 在安装SDK8.1和Visual Studio 2017时,提示“已停止工作”

    解决办法:在微软官网下载 .net framework 的最新的开发包(Build apps - Dev Pack),重新安装后问题得到解决. https://dotnet.microsoft.com ...

  8. halcon学习

    apply_metrology_model: 目标和背景灰度差别很小,但目标大概位置确定,需要确定目标位置的圆或者矩形: ball:圆形或矩形和图像其他部分相比为特殊图样

  9. 五一训练包E-5

    题目链接:https://vjudge.net/contest/436484#problem/E 题目的大致意思就是给俩数,分别是小数组的大小N和数目K,给的数组是递增的,方便后续的判断,将大数组分成 ...

  10. snorkel SentenceNgramViewer 标记时出现 Integrity Error

    Snorkel使用SQLAlchemy作为数据管理工具,在本地会生成一个.db文件,现有操作与.db文件中已有的记录重复,违反了数据库主键不能重复的性质 解决方式: You can load a la ...